JVM young gc和full gc触发条件

  • young gc:

         Eden区可用内存不足

  • full gc:  
  1. 老年代达到某一阈值(默认92%)
  2. 方法区可用内存不足
  3. 在young gc之前,会先检查老年代最大可用的连续空间是否大于新生代所有对象的总空间。如果小于,说明YGC是不安全的,则会查看参数 HandlePromotionFailure 是否被设置成了允许担保失败,如果不允许则直接触发Full GC;如果允许,那么会进一步检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均大小,如果小于会触发 Full GC;大于则会执行young gc(即使是不安全,有可能young gc后进入老年代的对象内存仍然大于老年代可用内存,此时会报内存溢出错误)
  4. 显式调用System.gc() 或者Runtime.gc() 

存活对象进入老年代的条件:

  1. 创建的大对象(对象内存大于设定阈值)直接进入老年代 
  2. young gc后,To Survivor区不足以存放存活对象
  3. 每次young gc后,存活对象年龄+1。经过多次young gc后,如果存活对象的年龄达到了设定阈值(默认15),则会晋升到老年代中。
  4. 动态年龄判定规则。To Survivor区中年龄从小到大的对象占据空间的累加之和,占到了 To Survivor区一半以上的空间,那么大于等于此年龄的对象会直接进入老年代,而不需要达到默认的晋升年龄。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值