2011-10-05 18 views
6

Podłączam mój telefon z Androidem do zaćmienia. I widzę te wiadomości od Logcat. Czy możesz mi powiedzieć, jaka jest różnica między "GC_EXPLICIT" a "GC_EXTERNAL_ALLOC"? a co oznacza "45% za darmo"?Zbieranie śmieci w 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 

Odpowiedz

9

Gorąco sugerują dając prezentacji wideo zarządzanie pamięcią z Google I/O 2011 zegarka:

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

Na około 14 minut w, idzie do głębokości co dokładnie te średnia w wyjściu logcat.

GC Explicit oznacza, że ​​aplikacja wyraźnie nazwała System.gc();

GC Concurrent jest uruchamiany, gdy stertka zaczyna się zapełniać i pojawia się Concurrent GC, aby mieć nadzieję, że wyczyści pamięć, zanim się zapełni.

1

GC_EXPLICIT oznacza, że ​​aplikacja została wyraźnie nazywa System.gc() lub aktywny Manger z systemem Android o nazwie System.gc()

GC_EXTERNAL_ALLOC jest coś bardziej skomplikowana. Istnieje kilka pamięci związanych z czasem życia obiektu Java o nazwie pamięci ZEWNĘTRZNEJ. Takich jak wykorzystanie pamięci przez GPU lub zasoby pixmap aplikacji. Ten typ pamięci alokuje użycie "malloc" stdlib do alokacji pamięci sterty, ale NIE przypisuje jej z GC Heap of Dalvik, ale jest także jedną z pamięci "HEAP". Całkowite wykorzystanie HEAP musi być mniejsze niż limit (decyduje GC).

Dalvik śledzenie przydziału tej pamięci.

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

Dalvik spowoduje GC dla GC_EXTERNAL_ALLOC jako sideeffect gdy warunek powyżej, nie jest to prawda.

Powiązane problemy