-
对象在新生代的分配
对象在新生代创建,然后创建在Eden区,如果发生YongGC那么如果内存足够就会被拷贝到survivor里面去,如果不够,那么进入老年代
-
什么时候会触发Minor GC
当年轻代的Eden内存不够的时候,JVM在创建对象就会发生MinorGC了
-
触发Minor GC之前会如何检查老年代可用内存大小和新生代对象大小
1.会判断年轻代的内存是否小于老年代的内存大小,如果小于那么直接执行MinorGC
2.如果年轻代的内存大小,大于老年代的内存大小,那么判断有没有设置,-XX:HandlePromotionFailure(JDK1.6之后就没有了) 如果没有设置,那么直接就行FullGC
3.如果设置了-XX:HandlePromotionFailure 这个参数,那么判断一下老年代的内存大小,是否大于,平均每次进入老年代的内存大小,如果小于就发生Full GC Full GC之后如果还小那么就OOM,如果大于那么发生YongGC
-
如何检查老年代可用内存大小和历次Minor GC之后升入老年代的平均对象大小
如果设置了-XX:HandlePromotionFailure 这个参数,那么判断一下老年代的内存大小,是否大于,平均每次进入老年代的内存大小,如果小于就发生Full GC Full GC之后如果还小那么就OOM,如果大于那么发生YongGC
-
什么情况下Minor GC之前会提前触发Full GC
1.老年代内存不足以,让年轻代的对象进入老年代,
2.老年代的内存小于平均每次进入老年代的内存
-
什么情况下会直接触发Minor GC
1.Eden区满了
-
Minor GC之后有哪几种情况对象会进入老年代
1.年轻超过15岁的(默认设置)
2.过大的对象(超过参数配置的)
3.在survivor复制的时候,另一块survivor小于要复制的内存,并且老年代的内存小于,复制的内存,那么这些对象将全部进入老年代