JVM 对象分配
程序员文章站
2022-05-29 10:27:30
JVM参数: 1)-Xmn: 新生代内存上限值 2)-Xms: 整个堆区初始内存分配的大小 3)-Xmx: 堆区内存的最大分配大小 4)-XX:SurvivorRatio: 决定eden与一个survivor大小之比 5)-XX:PretenureSizeThreshold: 大对象直接放入老年代, ......
jvm参数:
1)-xmn: 新生代内存上限值
2)-xms: 整个堆区初始内存分配的大小
3)-xmx: 堆区内存的最大分配大小
4)-xx:survivorratio: 决定eden与一个survivor大小之比
5)-xx:pretenuresizethreshold: 大对象直接放入老年代,避免在eden区和两个survivor区进行大量内存复制
6)-xx:maxtenuringthreshold: 对象进入老年代的岁数,默认为15
担保机制:
当对象无法放入survivor空间,对象将被直接放入老年代。
在发生minor gc 之前,虚拟机会检查老年代最大可用连续空间是否大于新生代所有对象空间,如果成立,则minor gc是安全的。否则,将检查是否设置允许担保失败,允许的话,检查可用空间是否大于历次晋升到老年代的对象的评价大小,如果大于,将进行minor gc,否则,或者不允许担保失败,将进行一次full gc。
长时间存活的对象将进入老年代:
每经过一次minor gc,对象年龄将增加1岁,当超过xx:maxtenuringthreshold时,进入老年代。
且根据动态年龄判定机制,survivor空间中相同年龄的对象总大小达到survivor空间的一半时,所有岁数大于等于该年龄的对象将直接进入老年代。