2011-10-05 10 views
6

Conecto mi teléfono Android para eclipsar. Y veo este mensaje de Logcat. ¿Puede decirme cuál es la diferencia entre 'GC_EXPLICIT' y 'GC_EXTERNAL_ALLOC'? y ¿qué significa "45% gratis"?Recolección de basura en dalvik vm

10-05 12:08:34.450: DEBUG/dalvikvm(813): GC_EXTERNAL_ALLOC freed 63K, 45% free 3156K/5703K, external 4113K/4348K, paused 73ms 
10-05 12:08:34.480: DEBUG/dalvikvm(101): GC_EXTERNAL_ALLOC freed 55K, 40% free 5883K/9799K, external 4911K/4913K, paused 124ms 
10-05 12:08:37.120: DEBUG/dalvikvm(101): GC_EXPLICIT freed 84K, 41% free 5870K/9799K, external 5745K/6078K, paused 104ms 
10-05 12:08:40.099: DEBUG/dalvikvm(493): GC_EXPLICIT freed 14K, 48% free 3782K/7175K, external 1625K/2137K, paused 75ms 
10-05 12:08:45.110: DEBUG/dalvikvm(188): GC_EXPLICIT freed 57K, 54% free 3203K/6855K, external 4988K/6206K, paused 78ms 
10-05 12:09:05.119: DEBUG/dalvikvm(822): GC_EXPLICIT freed 349K, 46% free 3696K/6727K, external 1625K/2137K, paused 65ms 

Respuesta

9

te sugeriría altamente dando el video de presentación Gestión de Memoria de Google I/O 2011 un reloj:

http://www.youtube.com/watch?v=_CruQY55HOk

En unos 14 minutos, se va a fondo sobre exactamente lo que estas significa en la salida de logcat.

GC Explicita básicamente significa que una aplicación ha llamado explícitamente a System.gc();

GC Concurrent se activa cuando su pila comienza a llenarse y se abre un GC simultáneo para borrar la memoria con suerte antes de que se llene.

1

GC_EXPLICIT significa que su aplicación ha llamado explícitamente System.gc() o del Pesebre Actividad del Sistema androide llamado System.gc()

GC_EXTERNAL_ALLOC es algo más complicado. Hay algo de memoria relacionada con el tiempo de vida del objeto de Java llamado memoria EXTERNA. Como el uso de memoria por GPU o recursos de mapa de píxeles de su aplicación. Este tipo de asignación de memoria utiliza "malloc" de stdlib en la memoria de montón de asignación pero NO se asigna desde el GC Heap de Dalvik, pero también es una de las memorias "HEAP". Y el uso de tamaño total del HEAP debe ser menor que un límite (decidir por GC).

Dalvik seguimiento de la asignación de esa memoria.

CONDITION: usableof(GC_HEAP) + usableof(NATIVE_HEAP[external]) <= allocaionLimit 

Dalvik causará una GC para GC_EXTERNAL_ALLOC como un efecto secundario cuando la condición anterior no es cierto.

Cuestiones relacionadas