新生代與老年代

Java 中的堆是 JVM 所管理的最大的一塊內存空間,主要用於存放各種類的實例對象。

在 Java 中,堆被劃分成兩個不同的區域:新生代 ( Young )、老年代 ( Old )。其中新生代 ( Young ) 又被劃分爲三個區域:Eden、From Survivor、To Survivor。

這樣劃分的目的是爲了使 JVM 能夠更好的管理堆內存中的對象,包括內存的分配以及回收。

堆的內存模型大致爲:

默認的,新生代 ( 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 的新生代空間大小。

 

根據垃圾回收機制的不同,Java堆有可能擁有不同的結構,最爲常見的就是將整個Java堆分爲

新生代和老年代。其中新生帶存放新生的對象或者年齡不大的對象,老年代則存放老年對象。

新生代分爲den區、s0區、s1區,s0和s1也被稱爲from和to區域,他們是兩塊大小相等並且可以互相角色的空間。

絕大多數情況下,對象首先分配在eden區,在新生代回收後,如果對象還存活,則進入s0或s1區,之後每經過一次

新生代回收,如果對象存活則它的年齡就加1,對象達到一定的年齡後(默認15),則進入老年代。

 

新生代:存放剛出生不久的對象

老年代:存放比較活躍、經常被引用的對象

垃圾回收機制在新生代比較頻繁

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