Android中垃圾回收日志信息
原因
GC_CONCURRENTfreed 178K, 41% free 3673K/6151K, external 0K/0K, paused 2ms+2ms
GC_EXPLICITfreed 6K, 41% free 3667K/6151K, external 0K/0K, paused 29ms
紅顏色標(biāo)出的部分就是垃圾回收觸發(fā)的原因。在Android中有五種類型的垃圾回收觸發(fā)原因。
- GC_CONCURRENT當(dāng)堆內(nèi)存增長到一定程度時會觸發(fā)。此時觸發(fā)可以對堆中的沒有用的對象及時進(jìn)行回收,騰出空間供新的對象申請,避免進(jìn)行不必要的增大堆內(nèi)存的操作。
- GC_EXPLICIT當(dāng)程序中調(diào)用System.gc()方法觸發(fā)。這個方法應(yīng)避免出現(xiàn)在程序中調(diào)用。因?yàn)镴VM有足夠的能力來控制垃圾回收。
- GC_EXTERNAL_MALLOC當(dāng)Bitmap和NIO Direct ByteBuffer對象分配外部存儲(機(jī)器內(nèi)存,非Dalvik堆內(nèi)存)觸發(fā)。這個日志只有在2.3之前存在,從2.3系統(tǒng)開始,垃圾回收進(jìn)行了調(diào)整,前面的對象都會存儲到Dalivik堆內(nèi)存中。所以在2.3系統(tǒng)之后,你就再也不會看到這種信息了。
- GC_FOR_MALLOC當(dāng)堆內(nèi)存已滿,系統(tǒng)需要更多內(nèi)存的時候觸發(fā)。這條日志出現(xiàn)后意味著JVM要暫停你的程序進(jìn)行垃圾回收操作。
- GC_HPROF_DUMP_HEAP當(dāng)創(chuàng)建一個內(nèi)存分析文件HPROF時觸發(fā)。
結(jié)果
GC_CONCURRENTfreed 178K, 41% free 3673K/6151K, external 0K/0K, paused 2ms+2ms
GC_EXPLICITfreed 6K, 41% free 3667K/6151K, external 0K/0K, paused 29ms
這部分?jǐn)?shù)據(jù)告訴我們JVM進(jìn)行垃圾回收釋放了多少空間。
堆內(nèi)存數(shù)據(jù)
GC_CONCURRENT freed 178K,41% free 3673K/6151K, external 0K/0K, paused 2ms+2ms
GC_EXPLICIT freed 6K,41% free 3667K/6151K, external 0K/0K, paused 29ms
這部分告訴我們堆內(nèi)存中可用內(nèi)存占的比例,當(dāng)前活躍的對象總的空間,以及當(dāng)前堆的總大小。所以這里的數(shù)據(jù)就是41%的堆內(nèi)存可用,已經(jīng)使用了3673K,總的堆內(nèi)存大小為6151K。
外部存儲數(shù)據(jù)
GC_EXTERNAL_ALLOC freed 1125K, 47% free 6310K/11847K,external 1051K/1103K, paused 46ms
GC_EXTERNAL_ALLOC freed 295K, 47% free 6335K/11847K,external 1613K/1651K, paused 41ms
這部分?jǐn)?shù)據(jù)告訴我們外部存儲(位于機(jī)器內(nèi)存)對象的數(shù)據(jù)。在2.3之前,bitmap對象存放在機(jī)器內(nèi)存。因此在第一條數(shù)據(jù)中我們可以看到以有1051K使用,外部存儲為1103K。
上面兩行數(shù)據(jù)相差100毫秒,我們可以看到第一條數(shù)據(jù)表明外部存儲快滿了,由于GC_EXTERNAL_ALLOC被觸發(fā),外部存儲空間擴(kuò)大到了1651K。
垃圾回收暫停時間
GC_CONCURRENT freed 178K, 41% free 3673K/6151K, external 0K/0K,paused 2ms+2ms
GC_EXPLICIT freed 6K, 41% free 3667K/6151K, external 0K/0K,paused 29ms
這部分?jǐn)?shù)據(jù)表明垃圾回收消耗的時間。在GC_CONCURRENT回收時,你會發(fā)現(xiàn)兩個暫停時間。一個是在回收開始的暫停時間,另一個時在回收結(jié)束的暫停時間。GC_CONCURRENT從2.3開始引入,相比之前的程序全部暫停的垃圾回收機(jī)制,它的暫停時間要小的多。一般少于5毫秒。因?yàn)镚C_CONCURRENT的絕大多數(shù)操作在一個單獨(dú)的線程中進(jìn)行。
總結(jié)
以上是生活随笔為你收集整理的Android中垃圾回收日志信息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Javascript创建类的七种方法
- 下一篇: 使用Roboguice依赖注入规划And