Java内存分配

对象优先在Eden分配

大多数情况,对象在新生代Eden区中分配。当Eden去没有足够内存空间分配时,进行Minor GC。

大对象直接进入老年代

大对象是指连续占用内存空间的对象,比如很长的字符串以及数组。

长期存活的对象将进入老年代

用一个年龄计数器,每次minor GC后存活的对象移动到Survior空间,并且计数器加1.年龄计数器大于一定值(默认是15),将晋升到老年代.可以用-XX:MaxTenuringThreshold设置阀值.

动态对象年龄判定

如果在Survivor空间中的相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,无须等到MaxTenuringThreshold中要求的年龄。

空间分配担保

在Minor GC前,虚拟机会检查老年代的最大连续空间是否大小新生代所有对象总空间。如果这个成立,Minor GC是安全的;否则会根据HandlePromotionFailure设置,担保是否进行Minor GC。

你可能感兴趣的:(java,jvm,内存分配)