我有我的目錄下載下面的消息,瞭解Android的GC消息
GC_CONCURRENT freed 456K, 19% free 2753K/3360K, paused 5ms+9ms, total 378ms
我試圖使最後總價值感。我已經在網站上檢查了其他與GC有關的問題,他們或者有兩個與併發GC相關的暫停或者一個非併發GC的總暫停。爲什麼我有兩個?我的應用暫停了5 + 9毫秒或378毫秒?總數是多少?
我有我的目錄下載下面的消息,瞭解Android的GC消息
GC_CONCURRENT freed 456K, 19% free 2753K/3360K, paused 5ms+9ms, total 378ms
我試圖使最後總價值感。我已經在網站上檢查了其他與GC有關的問題,他們或者有兩個與併發GC相關的暫停或者一個非併發GC的總暫停。爲什麼我有兩個?我的應用暫停了5 + 9毫秒或378毫秒?總數是多少?
http://www.youtube.com/watch?v=_CruQY55HOk。
大約17分鐘左右觀看視頻。這傢伙詳細解釋了logcat消息。
GC_CONCURRENT freed 456K, 19% free 2753K/3360K, paused 5ms+9ms, total 378ms
GC_CONCURRENT : Jumps in because Heap is growing
19% free 2753K/3360K After this collection 19% of memory is free. Check the heap usage.paused 5ms+9ms Time taken to collect garbage. Total pause time is 378ms.
我對視頻有所瞭解,它解釋了我已經知道的「暫停的5ms + 9ms」部分,但不包括總共378部分。沒有解釋總時間的文檔中的哪個部分。 –
378ms是總暫停時間 – Raghunandan
有沒有參考?視頻或文檔不會觸及該視頻。 –
GC_CONCURRENT
:當堆增長時觸發。因此,它可以及時回收內存,因此堆並不需要放大
GC_CONCURRENT
釋放456K
這部分告訴你多少內存被這個GC釋放掃
GC_CONCURRENT
釋放456K,19 %免費2753K/3360K
這部分講述堆的空閒百分比,活動對象的大小以及堆的總大小。所以在上面的例子中,免費使用19%,使用2753K的內存,總堆大小爲3360K。
日誌的最後部分告訴你GC花了多長時間。在GC_CONCURRENT
集合上,您將看到2次。一個在收集開始時,另一個在結束時。
對於n
併發GC事件,只有一個暫停時間,它通常要大得多。例如。暫停378ms
來源:
https://sites.google.com/site/pyximanew/blog/androidunderstandingddmslogcatmemoryoutputmessages
裏的東西都解釋清楚的另一個地方......
我知道所有這些,你的來源不解決這個問題。我有三個時間值不是兩個我知道暫停5ms + 9ms這個部分是什麼意思,但究竟是什麼總數? –
還沒有一個明確的答案,但是從我get,GC_CONCURRENT是一個垃圾收集器,它運行在一個單獨的線程中。這意味着雖然它可能總共需要X毫秒(在你的情況下)運行,但實際運行的線程不會被阻塞很長時間。它只會在併發垃圾收集過程的開始和結束時被阻塞(在你的例子中5 + 9 = 14ms)
這種類型的垃圾收集是由JVM自動觸發的,當它決定它這是一個很好的時間(通常當這堆堆的危險性增加時)。其他類型的GC,如GC_EXPLICIT(如果我沒有誤解該名稱)會在您執行
系統時觸發。GC();
在您的代碼中。對於這種類型的垃圾收集,它只會報告一次(如Y ms),在這種情況下,您的線程實際上會在該時間段內被阻塞,直到完成此類GC過程。
從看一些我認爲總共(378毫秒)的systraces並不能反映GC實際上暫停了你的應用程序的時間。它確實反映了垃圾收集所花費的時間。暫停的時間是你應該看的。
可能的重複[什麼是GC \ _FOR \ _MALLOC,GC \ _EXPLICIT和其他GC \ _ * *在Android Logcat中的含義?](http://stackoverflow.com/questions/4976566/what-do-gc -for-malloc -gc -external-and-other-gc-mean-in-android-logcat) – ForceMagic