2012-11-27 91 views
1

我運行JBoss 5.1和我得到這個GC數據時,全部發生GC爲什麼會出現前後堆大小應該不會吧之間的這種小的差異-verbose垃圾收集解釋

34.098: [GC 197635K->91639K(236480K), 0.0356348 secs] 
37.139: [GC 217911K->100951K(239936K), 0.0541968 secs] 
37.194: [Full GC 100951K->97239K(304704K), 0.3325776 secs] 
38.602: [GC 214271K->97547K(285568K), 0.0488937 secs] 
41.395: [GC 220811K->111699K(304512K), 0.0334592 secs] 
42.734: [GC 235155K->115815K(304384K), 0.0208743 secs] 
43.722: [GC 239271K->115801K(303872K), 0.0166861 secs] 
44.373: [GC 241049K->118266K(304128K), 0.0106151 secs 

有人可以解釋全GC時要大一些。在完整的GC之前是「正常」的GC,它有這麼大的差異(和小的收集時間?),我只注意到這兩條線的時間戳非常接近

回答

0

你看到的是兩個集合發生在年輕/伊甸園空間和舊空間。這兩個空間使用不同類型的收藏家,因爲這些地區的物體具有不同的特徵。 那些完整的GC通常是最大的問題,因爲它們速度很慢,它們會暫停虛擬機。幸運的是,還沒有一個大問題,但你的問題是它是爲什麼造成的。

不幸的是,這是不可能的。 如果你想知道更多,你應該激活開關-XX:+PrintGCDetails

但是,我們可以猜測。正如你正確指出的那樣,堆沒有滿(300MB中有100MB),並且它不會收集太多(30MB)。 所以我猜測這個GC是由致電System.GC()造成的。您應該使用 - XX:+DisableExplicitGC來防止它們發生,或者您找到實際完成並刪除它的代碼。

+0

我只是想知道,也許這是正常的應用服務器啓動有那些完整的GC?因爲服務器啓動後,我從那裏沒有完整的集合。 – Mata