(轉載)GC(Allocation Failure)

日前查看某個程序的日誌,發現一直在報GC相關的信息,不確定這樣的信息是代表正確還是不正確,所以正好藉此機會再複習下GC相關的內容:

以其中一行爲例來解讀下日誌信息:

[GC (Allocation Failure) [ParNew: 367523K->1293K(410432K), 0.0023988 secs] 522739K->156516K(1322496K), 0.0025301 secs] [Times: user=0.04 sys=0.00, real=0.01 secs]

GC:

表明進行了一次垃圾回收,前面沒有Full修飾,表明這是一次Minor GC ,注意它不表示只GC新生代,並且現有的不管是新生代還是老年代都會STW。

Allocation Failure:

表明本次引起GC的原因是因爲在年輕代中沒有足夠的空間能夠存儲新的數據了。

ParNew:

    表明本次GC發生在年輕代並且使用的是ParNew垃圾收集器。ParNew是一個Serial收集器的多線程版本,會使用多個CPU和線程完成垃圾收集工作(默認使用的線程數和CPU數相同,可以使用-XX:ParallelGCThreads參數限制)。該收集器採用複製算法回收內存,期間會停止其他工作線程,即Stop The World。

367523K->1293K(410432K):單位是KB

三個參數分別爲:GC前該內存區域(這裏是年輕代)使用容量,GC後該內存區域使用容量,該內存區域總容量。

0.0023988 secs:

    該內存區域GC耗時,單位是秒

522739K->156516K(1322496K):

三個參數分別爲:堆區垃圾回收前的大小,堆區垃圾回收後的大小,堆區總大小。

0.0025301 secs:

該內存區域GC耗時,單位是秒

[Times: user=0.04 sys=0.00, real=0.01 secs]:

    分別表示用戶態耗時,內核態耗時和總耗時

 

分析下可以得出結論:

    該次GC新生代減少了367523-1293=366239K

    Heap區總共減少了522739-156516=366223K

    366239 – 366223 =16K,說明該次共有16K內存從年輕代移到了老年代,可以看出來數量並不多,說明都是生命週期短的對象,只是這種對象有很多。

    我們需要的是儘量避免Full GC的發生,讓對象儘可能的在年輕代就回收掉,所以這裏可以稍微增加一點年輕代的大小,讓那17K的數據也保存在年輕代中。
 

文章轉載自:https://blog.csdn.net/zc19921215/article/details/83029952

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章