Android dalvikvm-heap: Clamp objetivo GC montón
Estoy escribiendo un procedimiento para sincronizar un gran número de contactos con la base de datos de contactos de Android. La descarga funciona bien para unos 700 contactos después de lo cual estoy constantemente obtener un error de montón de memoria que llama número infinito de declaración GC y termina Re-arrancar el teléfono. Estoy haciendo frente al problema en deseo de HTC.
Comprobé el tamaño de montón de la aplicación utilizando la herramienta de asignación de montón de DDMS, así como extraído el archivo hprof con Debug.dumpHprofData. Ambos registros indicaron que el tamaño del montón es de aproximadamente 2,4 MB.
- Tabla de referencia local de JNI de Android Expand
- DDMS y OS muestran información de memoria diferente sobre mi aplicación
- ¿Cuándo es exactamente seguro usar clases anónimas internas?
- Fuga de memoria de Android con final estático
- Android contrapartida de la advertencia de memoria iOS
Sin embargo, tengo los siguientes registros que indica que el tamaño del montón es más que 32.MB
dalvikvm-heap(92): Clamp target GC heap from 33.999MB to 32.000MB dalvikvm(92): GC_FOR_MALLOC freed 2 objects / 48 bytes in 313ms
Había insertado las siguientes sentencias de registro en el bucle donde se escribió mi lógica de descarga de contatcs.
Log.e("Memory", "free mem =" +runtime.freeMemory()); Log.e("Memory", "total memory =" +runtime.totalMemory());
Estos son los valores iniciales y finales de la declaración impresa
--------------------------------------------------------------- 11-11 12:56:04.168: ERROR/Memory(25132): free mem =871248 11-11 12:56:04.168: ERROR/Memory(25132): total memory =4202464 --------------------------------------------------------------- 11-11 13:01:55.408: ERROR/Memory(25132): free mem =891640 11-11 13:01:55.408: ERROR/Memory(25132): total memory =4726752 ---------------------------------------------------------------
Esto indica que aparentemente no hay fugas de memoria presentes en la lógica de sincronización de contactos.
¿Puede alguien por favor, hágamelo saber por qué el tamaño del montón aumentó (hasta 32.00Mb) a tal punto que el dispositivo se reinicia? Soy nuevo en Android y Java así que por favor, vaya fácil en mí:) …..
- Límite de tamaño de Android montón, todavía tenemos necesidad de diseñar aplicaciones con un límite de 16 MB en mente?
- Reciclaje de bitmaps
- Gestión de la memoria android en el ciclo de vida de la actividad
- ¿Cuál es el uso de MemoryFile en android
- Android, botón de nuevo dealloca Memoria de actividad?
- Fuga de memoria de Android EditText
- ¿Cómo acceder a Classloaders / App Linearalloc classinformation size?
- Callback de Android: ¿es una posible pérdida de memoria?
Aunque esto no es la mejor respuesta, te recomiendo que veas el video de la administración de memoria para aplicaciones Android en Google IO 2011. Hace un gran trabajo explicando cómo administrar la memoria y qué significan los mensajes que estás viendo.
Necesitas publicar tu código para que cualquier persona te ayude. De lo contrario asumo dos cosas:
Al descargar, significa buscar datos desde una ubicación remota? Parece que estás guardando muchas referencias a tus datos en la memoria. ¿Tienes que? Dependiendo de lo que esté tratando de lograr, suele haber algunas cosas que podría tratar de minimizar su huella de memoria. Para empezar, me aseguraría de que no utilice ninguna referencia de cadenas, pero transmitiría los datos directamente al consumidor. Además, trate de procesar todos sus datos en trozos. ¿También necesita persistir los datos en el sistema de archivos? Si es así, transmita directamente al sistema de archivos y evite todo el almacenamiento de memoria. Si publicas algún código, eso podría ayudarte.