![](/img/trans.png)
[英]G1 Garbage collection - repeated full GC - does this represent a heap fragmentation / garbage compaction issue?
[英]Repeated Full GC with available Heap
即使沒有充分使用堆,我也會遇到重復的Full GC。
gc日志如下所示: http : //d.pr/i/iFug (藍線是已使用的堆,灰色矩形是Full GC)。
這似乎是與該問題中發布的問題類似的問題: 頻繁的具有空堆的完整GC
但是,該線程沒有提供任何實際的問題答案。 我的應用程序確實使用RMI,並且在升級45之前生產服務器確實使用1.6,從而將GC間隔從1分鍾增加到1小時( http://docs.oracle.com/javase/7/docs/technotes/guides/rmi /relnotes.html )。 但是,從日志的其余部分來看,我看不到Full-GC-every-1-min模式。
可能是什么原因造成的?
原因很可能是您達到了當前的堆大小。 堆的大小小於您設置的最大值,並在程序運行時進行調整。
例如,假設您設置的最大大小為1 GB,則初始堆大小可能為256 MB,當達到256 MB時,它將執行完整的GC,在此GC之后,它可能會決定400 MB為更好的大小,並且達到此大小時執行完整的GC等
當保有權空間填滿或找不到可用空間時,您將獲得主要收藏。 例如,是否零散。
如果幸存者空間太小,您還將獲得全部收藏。
簡而言之,最可能的原因是您使用的gc調整參數。 我建議您簡化調整參數,直到系統以預期的方式運行。
如鏈接線程中所述,禁用顯式GC並查看FullGC模式是否再次出現: -XX:+DisableExplicitGC
。 RMI代碼可能在給定的時間間隔內觸發了顯式GC,這在某些情況下可能不是所希望的。
如果FullGC仍然發生,我將使用線程轉儲以及可能的堆轉儲來分析問題。
另外,使用jstat
查看Eden,Survivor,OldGen空間的占用情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.