g1


G1中提供了三種模式垃圾回收模式,young gc、mixed gc 和 full gc

 

發生在年輕代的GC算法,一般對象(除了巨型對象)都是在eden region中分配內存,當所有eden region被耗盡無法申請內存時,就會觸發一次young gc

參數

含義

-XX:MaxGCPauseMillis

設置G1收集過程目標時間,默認值200ms

-XX:G1NewSizePercent

新生代最小值,默認值5%

-XX:G1MaxNewSizePercent

新生代最大值,默認值60%



當越來越多的對象晉升到老年代old region時,為了避免堆內存被耗盡,虛擬機會觸發一個混合的垃圾收集器,即mixed gc,mixed gc中也有一個閾值參數 -XX:InitiatingHeapOccupancyPercent,當老年代大小占整個堆大小百分比達到該閾值時,會觸發一次mixed gc.

mixed gc的執行過程有點類似cms,主要分為以下幾個步驟:

1. initial mark: 初始標記過程,整個過程STW,標記了從GC Root可達的對象

2. concurrent marking: 並發標記過程,整個過程gc collector線程與應用線程可以並行執行,標記出GC Root可達對象衍生出去的存活對象,並收集各個Region的存活對象信息

3. remark: 最終標記過程,整個過程STW,標記出那些在並發標記過程中遺漏的,或者內部引用發生變化的對象

4. clean up: 垃圾清除過程,如果發現一個Region中沒有存活對象,則把該Region加入到空閑列表中

 

如果對象內存分配速度過快,mixed gc來不及回收,導致老年代被填滿,就會觸發一次full gc,G1的full gc算法就是單線程執行的serial old gc,會導致異常長時間的暫停時間,需要進行不斷的調優,盡可能的避免full gc.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM