04.Java 堆内存 新生代 老年代?
Java?中的堆是?JVM?所管理的最大的一塊內存空間,主要用于存放各種類的實例對象。
在?Java?中,堆被劃分成兩個不同的區域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被劃分為三個區域:Eden、From Survivor、To?Survivor。
這樣劃分的目的是為了使?JVM?能夠更好的管理堆內存中的對象,包括內存的分配以及回收。
堆的內存模型大致為:
從圖中可以看出:?堆大小 = 新生代 + 老年代。其中,堆的大小可以通過參數 –Xms、-Xmx 來指定。
本人使用的是 JDK1.6,以下涉及的?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 的新生代空間大小。
JVM?每次只會使用 Eden 和其中的一塊 Survivor 區域來為對象服務,所以無論什么時候,總是有一塊 Survivor 區域是空閑著的。
因此,新生代實際可用的內存空間為 9/10 ( 即90% )的新生代空間。
?
總結
以上是生活随笔為你收集整理的04.Java 堆内存 新生代 老年代?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 03.native方法(JNI)
- 下一篇: JVM:GC日志解读