tengo porque oreo nada memoria llena liberar kia interno interna espacio como celular cache borrar almacenamiento android enums garbage-collection ddms

porque - Recolector de basura en Android se está ejecutando, pero no se muestra nada como asignado en el rastreador de asignación ddms



liberar memoria interna android (2)

Proporcione información sobre el tipo de recolector de basura. Asignación de mapa de bits, es decir, los píxeles de mapa de bits reales (no la información de mapa de bits que es muy pequeña) se asignan al montón, PERO no son visibles para ninguna herramienta de seguimiento de asignación para la versión de Android debajo de 3.0 (Honeycomp). Entonces, si está cargando información de mapa de bits, se llamará a la asignación extrema GC.

En mi aplicación, tengo cuidado de no hacer asignaciones de pila en el bucle de renderizado principal, para evitar que el recolector de basura tenga que hacer su trabajo.

Después de realizar una serie de cambios en mi aplicación, de repente veo que se invoca el recolector de basura cada segundo o dos, y se liberan alrededor de 400k de memoria por invocación.

Miro hacia atrás a los cambios que hice, y no tengo asignaciones explícitas en el hilo de renderizado. Así que ejecuto ddms y uso la herramienta "Allocation Tracker", pero no hay asignaciones, aparte de las normales que están relacionadas con la ejecución de ddms. Y ciertamente no se muestran suficientes asignaciones para los 400k bytes que aparentemente están siendo recolectados basura cada dos o más


(Ya había encontrado la solución, pero estoy publicando la pregunta + respuesta para beneficio de otros)

Resultó que pude rastrear el problema hasta llamar al método .values ​​() de una clase enum, que asigna una nueva matriz en cada llamada. Pero por alguna razón, esas asignaciones no se muestran en el rastreador de asignación de ddms, por lo que es bastante difícil de rastrear.

Afortunadamente, pude usar git bisect para encontrar el cambio específico que introdujo el problema, y ​​luego rastrearlo hasta el problema exacto de ese cambio.

Editar: después de algunas pruebas adicionales, parece que la clonación de una matriz en general no aparece en el rastreador de asignación.

Información adicional: Esto parece ser un problema en Honeycomb y más abajo, al clonar un objeto. Será arreglado en ICS. ( http://code.google.com/p/android/issues/detail?id=19831 )