您好,登錄后才能下訂單哦!
Young GC----針對年輕代
當Eden區滿了的時候,會觸發Young GC
Full GC----針對整個堆
1. 在發生Young GC的時候,虛擬機會檢測之前每次晉升到老年代的平均大小是否大于年老代的剩余空間,如果大于,則直接進行Full GC;
2. 如果小于,但設置了Handle PromotionFailure,那么也會執行Full GC。promotion failed是在進行Minor GC時,survivor space放不下、對象只能放入老年代,而此時老年代也放不下造成的。
3. 永久代空間不足,會觸發Full GC
4. System.gc()也會觸發Full GC
5. 堆中分配很大的對象
所謂大對象,是指需要大量連續內存空間的java對象,例如很長的數組,此種對象會直接進入老年代,而老年代雖然有很大的剩余空間,但是無法找到足夠大的連續空間來分配給當前對象,此種情況就會觸發JVM進行Full GC。為了解決這個問題,CMS垃圾收集器提供了一個可配置的參數,即-XX:+UseCMSCompactAtFullCollection開關參數,用于在“享受”完Full GC服務之后額外免費贈送一個碎片整理的過程,內存整理的過程無法并發的,空間碎片問題沒有了,但提頓時間不得不變長了,JVM設計者們還提供了另外一個參數 -XX:CMSFullGCsBeforeCompaction,這個參數用于設置在執行多少次不壓縮的Full GC后,跟著來一次帶壓縮的。
6.?CMS GC concurrent mode failure
concurrent mode failure是在執行CMS GC的過程中同時有對象要放入老年代,而此時老年代空間不足造成的(有時候“空間不足”是CMS GC時當前的浮動垃圾過多導致暫時性的空間不足觸發Full GC)。
CMS GC----針對年老代
配置了-XX:CMSInitiatingOccupancyFraction=75和-XX:+UseCMSInitiatingOccupancyOnly,設定CMS在對內存占用率達到75%的時候開始GC
配置了-XX:+CMSClassUnloadingEnabled,CMSInitiatingPermOccupancyFraction=80%,即:Perm Gen的使用達到一定的比率,默認為92%
配置了-XX:+ExplicitGCInvokesConcurrent,且未配置-XX:+DisableExplicitGC的情況下,顯示調用了System.gc()
CMS在并發模式工作的時候是只收集old gen的。但一旦并發模式失敗(發生concurrent mode failure)就有選擇性的會進行全堆收集,也就是退回到full GC。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。