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.

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í:) …..

    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:

  • Dado que su teléfono se está estrellando, debe estar haciendo algo impresionante que permite que su programa funcione fuera del espacio de memoria asignado de la VM.
  • ¿Está almacenando todos los contactos en una Lista o Array? Si es así, ahí está tu problema. Esto es lo que los arroyos son buenos en la fijación.
  • 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.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.