Every time a garbage collection occurs, logcat prints a message with the following information:
D/dalvikvm: <GC_Reason> <Amount_freed>, <Heap_stats>, <External_memory_stats>, <Pause_time>
-
GC Reason
-
What triggered the garbage collection and what kind of collection it is. Reasons that may appearinclude:
-
GC_CONCURRENT
- A concurrent garbage collection that frees up memory as your heap begins to fill up. GC_FOR_MALLOC
- A garbage collection caused because your app attempted to allocate memory when your heap wasalready full, so the system had to stop your app and reclaim memory. GC_HPROF_DUMP_HEAP
- A garbage collection that occurs when you create an HPROF file to analyze your heap. GC_EXPLICIT
- An explicit garbage collection, such as when you call gc() (which youshould avoid calling and instead trust the garbage collector to run when needed). GC_EXTERNAL_ALLOC
- This happens only on API level 10 and lower (newer versions allocate everything in the Dalvikheap). A garbage collection for externally allocated memory (such as the pixel data stored innative memory or NIO byte buffers).
Amount freed
- The amount of memory reclaimed this garbage collection. Heap stats
- Percentage free and (number of live objects)/(total heap size). External memory stats
- Externally allocated memory on API level 10 and lower (amount of allocated memory) / (limit atwhich collection will occur). Pause time
- Larger heaps will have larger pause times. Concurrent pause times show two pauses: one at thebeginning of the collection and another near the end.
For example:
D/dalvikvm( 9050): GC_CONCURRENT freed 2049K, 65% free 3571K/9991K, external 4703K/5261K, paused 2ms+2ms
起原: <http://developer.android.com/tools/debugging/debugging-memory.html#LogMessages>
GC Reason:引起GC收受接管的原因。包含a)GC_CONCURRENT:我的懂得是当你的堆快被用完的时辰,就会触发这个GC收受接管。b)堆已经满了,同时又要试图分派新的内存,所以体系要收受接管内存。c)GC_HPROF_DUMP_HEAP这是做HPROF解析用的,正常景象下不会有的。d)这个是明白调用gc产出的垃圾收受接管。e)GC_EXTERNAL_ALLOC这个在2.3版本今后已经放弃了。所以不消关怀了。
Amount freed:本次垃圾收受接管开释出来的内存。
Heap stats:当前余暇内存占总内存的百分比。比如下面的例子总的65%就是说有65%的余暇。二后面的3571K是占用了这么多,9991K是总的内存。这两个值相除,就是占用的百分比,加上前面的65%正好是100%。
External memory stats:2.3之后就放弃了。
Pause time:你的应用暂停的时候。
假如3571K/9991K 这个值络续增长,从来不削减,则可能有内存泄漏的题目。