本文轉自:http://droidyue.com/blog/2014/11/08/understanding-garbage-collection-output-messages-in-android/android
感謝做者的翻譯!!!google
若是你是一名Android開發者而且經常看程序日誌的話,那麼下面的這些信息對你來講可能一點都不陌生。spa
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 freed 379K, 42% free 3856K/6535K, external 0K/0K, paused 2ms+3ms
GC_EXPLICIT freed 144K, 41% free 3898K/6535K, external 0K/0K, paused 32ms
GC_CONCURRENT freed 334K, 40% free 4091K/6727K, external 0K/0K, paused 2ms+3ms
可是這些究竟是什麼,又有什麼含義呢?線程
上面的這幾行就是Android系統垃圾回收的部分輸出信息。每當垃圾回收被觸發的時候,你就能夠經過logcat查看到這樣的信息。這樣短短的一行的日誌有着很大的信息量。好比經過日誌咱們能夠發現程序可能有內存(泄露)問題。本文將具體介紹這些日誌信息的每一部分的含義來幫助幫助你們更好地瞭解垃圾回收的運行狀況。翻譯
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日誌
紅顏色標出的部分就是垃圾回收觸發的緣由。在Android中有五種類型的垃圾回收觸發緣由。code
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對象
這部分數據告訴咱們JVM進行垃圾回收釋放了多少空間。blog
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的絕大多數操做在一個單獨的線程中進行。
本文中內容摘自 Google I/O 2011: Memory management for Android Apps,若是感興趣,請訪問這裏瞭解更多。
https://sites.google.com/site/pyximanew/blog/androidunderstandingddmslogcatmemoryoutputmessages