30.堆区中新生代和老年代相关参数设置(-XX:NewRatio和-XX:SurvivorRatio)
1.新生代与老年代
1.存储在JVM
中的Java对象可以被划分为两类:一类生命周期很短,这类对象的创建和消亡很快;一类生命周期很长,极端情况下,还能够与JVM的生命周期保持一致。
2.JVM堆区进一步细分为新生代和老年代。
3.年轻代又可以划分为Eden
区、Survivor0
区和Survivor1
区(有时候也叫做from
区、to
区)
2.新生代和老年代的比例设置
1.-XX:NewRatio=2
表示新生代占1
,老年代占2
。则新生代占整个堆的1/3
。(这个参数一般不会使用)
2.默认情况下,新生代和老年代的比例是1:2
。
3.在HotSpot
中,Oracle JVM
官网说Eden
区和另外两个Survivor
空间默认所占的比例是8:1:1
。(实际上默认并不是8:1:1
,如下图,Eden区:Survivor0:Survivor1: = 11264 : 2048 : 2048 = 5.5 : 1 : 1
,不同的情况,可能比例不一样,如果需要设置成8:1:1
的话,自己直接设置-XX:SurvivorRatio=8
就可以了。)
4.可以通过-XX:SurvivorRatio
调整这个空间的比例,默认值是8
。
5. -XX:-UseAdaptiveSizePolicy
:关闭自适应的内存分配策略 (暂时用不到)
6. 几乎所有的对象都在Eden
区别new
出来。
7. 绝大部分的Java
对象都在新生代被销毁
8.-Xmn
:设置新生代的空间的大小。 (一般不设置)