JVM學習記錄—詳解G1垃圾回收器

目錄

G1回收器模型

新生代Region分配

 ​

新生代如何進行垃圾回收?

新生代進入老年代

大對象問題?


 

本文主要參考狸貓技術窩文章

之前的文章https://blog.csdn.net/e5yrt2/article/details/105540664,大致介紹了JVM相關的垃圾回收器,有CMS、PreNew和G1垃圾回收器。而G1(GarbageFirst)是性能最好,同樣也是jdk9默認的垃圾回收器。

G1回收器模型

那麼有多少Region?每個Region又有多大?

因爲新生代和老年代都會被Region管理,默認來說,Region的大小爲分配的堆內存的大小除以2048。

比如分配的堆內存爲4G,那麼分配到每個Region的大小爲2MB。

新生代Region分配

 

JVM中有-XX:G1NewSizePercent 這個配置用來設置初始化時候新生代的比例的。

新生代如何進行垃圾回收?

假設新生代默認分配的是堆內存的60%,那麼新生代約佔有1200個Region,S1和S2分別有100,具體分配如下圖

這時候觸發新生代的GC,G1就會用之前說過的複製算法來進行垃圾回收,進入一個“Stop the World”狀態,然後把Eden對應的Region中的存活對象放入S1對應的Region中,接着回收掉Eden對應的Region中的垃圾對象 。這個跟之前的回收方式一致。

新生代進入老年代

進入老年代的條件跟原有的一致

1、躲過多次垃圾回收後進入老年代

2、MinorGC後存活對象超過S區的50%

大對象問題?

之前的方案中,大對象會被直接分配到老年代。而在G1回收器中,大對象可以橫跨多個Region存放,如下圖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章