04.Java 堆内存 新生代 老年代?
Java?中的堆是?JVM?所管理的最大的一塊內(nèi)存空間,主要用于存放各種類(lèi)的實(shí)例對(duì)象。
在?Java?中,堆被劃分成兩個(gè)不同的區(qū)域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被劃分為三個(gè)區(qū)域:Eden、From Survivor、To?Survivor。
這樣劃分的目的是為了使?JVM?能夠更好的管理堆內(nèi)存中的對(duì)象,包括內(nèi)存的分配以及回收。
堆的內(nèi)存模型大致為:
從圖中可以看出:?堆大小 = 新生代 + 老年代。其中,堆的大小可以通過(guò)參數(shù) –Xms、-Xmx 來(lái)指定。
本人使用的是 JDK1.6,以下涉及的?JVM?默認(rèn)值均以該版本為準(zhǔn)。
默認(rèn)的,新生代 ( Young ) 與老年代 ( Old ) 的比例的值為 1:2 ( 該值可以通過(guò)參數(shù) –XX:NewRatio 來(lái)指定 ),即:新生代 ( Young ) = 1/3 的堆空間大小。
老年代 ( Old ) = 2/3 的堆空間大小。其中,新生代 ( Young ) 被細(xì)分為 Eden 和 兩個(gè) Survivor 區(qū)域,這兩個(gè) Survivor 區(qū)域分別被命名為 from 和 to,以示區(qū)分。
默認(rèn)的,Edem : from : to = 8 : 1 : 1 ( 可以通過(guò)參數(shù) –XX:SurvivorRatio 來(lái)設(shè)定 ),即:?Eden = 8/10 的新生代空間大小,from = to = 1/10 的新生代空間大小。
JVM?每次只會(huì)使用 Eden 和其中的一塊 Survivor 區(qū)域來(lái)為對(duì)象服務(wù),所以無(wú)論什么時(shí)候,總是有一塊 Survivor 區(qū)域是空閑著的。
因此,新生代實(shí)際可用的內(nèi)存空間為 9/10 ( 即90% )的新生代空間。
?
總結(jié)
以上是生活随笔為你收集整理的04.Java 堆内存 新生代 老年代?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 03.native方法(JNI)
- 下一篇: JVM:GC日志解读