android 通知垃圾回收,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
紅顏色標出的部分就是垃圾回收觸發的原因。在Android中有五種類型的垃圾回收觸發原因。
GC_CONCURRENT當堆內存增長到一定程度時會觸發。此時觸發可以對堆中的沒有用的對象及時進行回收,騰出空間供新的對象申請,避免進行不必要的增大堆內存的操作。
GC_EXPLICIT當程序中調用System.gc()方法觸發。這個方法應避免出現在程序中調用。因為JVM有足夠的能力來控制垃圾回收。
GC_EXTERNAL_MALLOC當Bitmap和NIO Direct ByteBuffer對象分配外部存儲(機器內存,非Dalvik堆內存)觸發。這個日志只有在2.3之前存在,從2.3系統開始,垃圾回收進行了調整,前面的對象都會存儲到Dalivik堆內存中。所以在2.3系統之后,你就再也不會看到這種信息了。
GC_FOR_MALLOC當堆內存已滿,系統需要更多內存的時候觸發。這條日志出現后意味著JVM要暫停你的程序進行垃圾回收操作。
GC_HPROF_DUMP_HEAP當創建一個內存分析文件HPROF時觸發。
結果
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
這部分數據告訴我們JVM進行垃圾回收釋放了多少空間。
堆內存數據
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
這部分告訴我們堆內存中可用內存占的比例,當前活躍的對象總的空間,以及當前堆的總大小。所以這里的數據就是41%的堆內存可用,已經使用了3673K,總的堆內存大小為6151K。
外部存儲數據
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
這部分數據告訴我們外部存儲(位于機器內存)對象的數據。在2.3之前,bitmap對象存放在機器內存。因此在第一條數據中我們可以看到以有1051K使用,外部存儲為1103K。
上面兩行數據相差100毫秒,我們可以看到第一條數據表明外部存儲快滿了,由于GC_EXTERNAL_ALLOC被觸發,外部存儲空間擴大到了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
這部分數據表明垃圾回收消耗的時間。在GC_CONCURRENT回收時,你會發現兩個暫停時間。一個是在回收開始的暫停時間,另一個時在回收結束的暫停時間。GC_CONCURRENT從2.3開始引入,相比之前的程序全部暫停的垃圾回收機制,它的暫停時間要小的多。一般少于5毫秒。因為GC_CONCURRENT的絕大多數操作在一個單獨的線程中進行。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的android 通知垃圾回收,Android中垃圾回收日志信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android数字累加,Android自
- 下一篇: zb配置快捷键(zbbz设置快捷键)