JVM之HotSpot中内存分配与回收策略

内存分配与回收策略

对象优先再Eden区分配对象,如果Eden区内存不够用,虚拟机就会发起一次针对Eden区的垃圾回收,使用复制算法,将Eden和Survivor-1的存活对象分配到Survivor-2中(下一次将把Eden和Survivor-2的存货对象分配到Survivor-1中),如果有多余的,将会通过担保方式进入老年代。如果是大对象(典型的时数组大对象),则直接进入老年代。可以通过-XX:PretenureSizeThreshold来设定大于这个值的对象就进入老年代。对象在Survivor区中每经历一次垃圾回收,就将年龄增加1,当达到15时(默认)还没有被回收的话,就将进入老年带,可以通过-XX:MaxTenuringThreshold来设定年龄大小。如果Survivor中某个年龄的对象数量占用Survivor一半以上的内存,则年龄大于等于这个年龄的直接进入老年代

空间分配担保:

Eden,Survivor区垃圾回收后,如果另一个Survivor不够装下剩余存活的对象,则有对象要进入老年代,这时候虚拟机会有 先检查自己剩余的连续空间是否能装下这些对象,如果足够,则顺利进行。如果不够,看HandlePromotionFailure设置是否允许担保失败,如果不允许,则需要进行一次Full GC(Full GC会带来性能的损耗)。如果允许,则会查看历次进入老年代的平均值与剩余最大连续空间,如果是,则尝试进行Minor GC,如果不是,则进行一次Full GC

你可能感兴趣的:(JVM之HotSpot中内存分配与回收策略)