JVM(六)JVM年轻代老年代常见的面试题

当Eden区空间不足时,会触发MinorGC,对象可能被转移到Survivor区或直接晋升到老年代。如果老年代内存不足以容纳年轻代晋升的对象,可能会触发FullGC。-XX:HandlePromotionFailure参数影响晋升策略,若老年代空间小于平均晋升大小,可能导致FullGC或OOM。年龄超过15岁的对象、大对象及Survivor区无法容纳的对象会直接进入老年代。
摘要由CSDN通过智能技术生成
  • 对象在新生代的分配

对象在新生代创建,然后创建在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小于要复制的内存,并且老年代的内存小于,复制的内存,那么这些对象将全部进入老年代

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值