JVM 对象分配

Posted zncepup

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM 对象分配相关的知识,希望对你有一定的参考价值。

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空间的一半时,所有岁数大于等于该年龄的对象将直接进入老年代。

以上是关于JVM 对象分配的主要内容,如果未能解决你的问题,请参考以下文章

三:JVM对象创建与内存分配机制深度剖析

JVM高级特性-JVM在堆中对象的分配布局访问过程

深入浅出-JVM:栈上分配

JVM之对象分配:栈上分配 & TLAB分配

JVM的内存分配策略

JVM 关于对象分配在堆栈TLAB的理解