2017-01-23 42 views
0

我試圖理解這個記錄過程中被清除:爲什麼老一代顯得年輕一代GC

2017-01-19T12:01:11.058+0000: [GC (Allocation Failure) [PSYoungGen: 172192K->1760K(171520K)] 379103K->208719K(521216K), 0.2104413 secs] [Times: user=0.02 sys=0.00, real=0.21 secs] 
     vmop     [threads: total initially_running wait_to_block] [time: spin block sync cleanup vmop] page_trap_count 
50409.055: ParallelGCFailedAllocation  [  392   3    4 ]  [  0  0  0  0 210 ] 0 
2017-01-19T12:01:11.268+0000: Total time for which application threads were stopped: 0.2115093 seconds, Stopping threads took: 0.0001451 seconds 

讓我介紹我的想法,我知道並請糾正我,如果我錯了:

首先是年輕的一部分:PSYoungGen: 172192K->1760K(171520K)

這意味着年輕一代有171520K的能力,其中172192K是在使用中。結果虛擬機在嘗試分配內存時觸發了一個GC,之後年輕一代被裁減到1760K。

這裏困擾我的是,總共使用了172192K> 171520K。

現在,其他部分:379103K->208719K(521216K)

這意味着老一代有能力521216K只有379103K是在使用中。不知怎的,它下降到208719K?

所以,我的問題是,如果這是年輕一代的收藏,爲什麼老一代會減少使用量?老一代不應該保持不變,或者增加(如果有東西被提升)?我在這裏錯過了什麼?

那麼年輕一代的使用量/總體尺寸是多少?

回答

1

1)對於這樣的問題:

所以,我的問題是,爲什麼老一代減少使用,如果這 是年輕一代收藏?

值379103K-> 208719K(521216K)定義GC之前的大小 - >整個堆的GC(總數)之後,而不是老一代。

2)爲了說明年輕一代的二手/總規模讓看看各部分的定義(粗體字,我認爲賺取差價的部分)之間的區別:

的數字前,在箭頭(172192K-> 1760K)之後分別指示 垃圾收集前後活體對象的組合大小,分別爲 。在次要收集之後,大小包括一些對象 ,這些對象是垃圾(不再活動),但無法回收。 這些對象要麼包含在終身代中,要麼來自終身代或永久代。

在括號中(171520K)下一個數字是 堆的承諾尺寸:的空間可用於Java對象不請求從操作系統 更多的內存量。 請注意,此號碼確實不包含其中一個生存空間,因爲在任何給定時間只有一個可用於 ,也不包括永久生成, 包含虛擬機使用的元數據。

更多信息,請here

相關問題