minor GC 、 full GC、新生代(young )、老年代(old)的一些理解

Minor GC

Minor GC是俗稱,新生代(新生代分爲一個 Eden區和兩個Survivor區)的垃圾收集叫做 Minor GC。 清除 Eden 和 from ,轉到to中。接下來from與to轉換。繼續清除 Eden和新from,轉到to。清除一次後存活超過年齡的 ,轉到老年代。to到了閾值後,部分對象轉到老年代。

晉升老年代參數:XX:+MaxTenuringThreshold

(至於爲什麼是 15次,原因是 HotSpot會在對象頭的中的標記字段裏記錄年齡,分配到的空間只有4位,所以最多隻能記錄到15)

另外,如果單個 Survivor 區已經被佔用了 50% (對應虛擬機參數: -XX:TargetSurvivorRatio),那麼較高複製次數的對象也會被晉升至老年代。

Full GC 就是收集整個堆,包括新生代,老年代,永久代(在JDK 1.8及以後,永久代會被移除,換爲metaspace)等收集所有部分的模式。

新生代老年代比例

默認的,新生代 ( Young ) 與老年代 ( Old ) 的比例的值爲 1:2 ( 該值可以通過參數 –XX:NewRatio 來指定 ),即:新生代 ( Young ) = 1/3 的堆空間大小。
老年代 ( Old ) = 2/3 的堆空間大小

新生代(young generation)

Eden、survivor(from+to),Eden:From:To=8:1:1( 可以通過參數 –XX:SurvivorRatio 來設定 ),即:Eden = 8/10 的新生代空間大小,From = To = 1/10 的新生代空間大小。 新生對象在Eden和from中,minor gc後,轉到to或者老年代。一次minor gc後,from與to角色互轉。
新生代實際可用的內存空間爲 9/10 ( 即90% )的新生代空間。
來自 https://blog.csdn.net/Muyundefeng/article/details/72667863

老年代(old generation):存有大對象或者 超過閾值的對象晉升來。

【來自】java堆,新生代,老年代,Eden空間,From Survivor空間,To Survivor空間
堆的內存模型大致爲:在這裏插入圖片描述
默認的,新生代 ( Young ) 與老年代 ( Old ) 的比例的值爲 1:2 ( 該值可以通過參數 –XX:NewRatio 來指定 ),即:新生代 ( Young ) = 1/3 的堆空間大小。
老年代 ( Old ) = 2/3 的堆空間大小。其中,新生代 ( Young ) 被細分爲 Eden 和 兩個 Survivor 區域,這兩個 Survivor 區域分別被命名爲 from 和 to,以示區分。
默認的,Edem : from : to = 8 : 1 : 1 ( 可以通過參數 –XX:SurvivorRatio 來設定 ),即: Eden = 8/10 的新生代空間大小,from = to = 1/10 的新生代空間大小。
JVM 每次只會使用 Eden 和其中的一塊 Survivor 區域來爲對象服務,所以無論什麼時候,總是有一塊 Survivor 區域是空閒着的。

java堆,新生代,老年代,Eden空間,From Survivor空間,To Survivor空間
JVM 系列文章之 Full GC 和 Minor GC

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