JVM——16.Full GC 相关总结

本文详细探讨了对象进入老年代的条件,包括分配担保、年龄阈值和大对象策略。分析了触发Full GC的各种情况,如老年代内存占用达到阈值、新生代对象无法容纳等。针对频繁Full GC的问题,提供了定位和解决方法,包括使用jstat、MAT工具进行分析,并给出调整JVM内存分配和优化代码的建议。
摘要由CSDN通过智能技术生成

1. 对象进入老年代的情况

  • 分配担保规则:新生代GC过后,存活对象太多,Survivor区放不下了,这个时候就需要通过分配担保进入老年代;
  • 达到年龄阈值:对象在新生代熬过了15次(-XX:MaxTenuringThreshold)GC,达到了年龄阈值,会晋升到老年代;(这种对象一般很少,只有在系统中的确需要长期存在的核心组件等,它们一般不能被回收)
  • 动态年龄判断:在新生代Survivor区的对象,如果:年龄1 + 年龄2 + 年龄3 + 年龄N 的对象大小占比大于了Survivor区的50%以上,那年龄N及以上的对象就会晋升到老年代;
  • 大对象直接进入老年代;(-XX:PretenureSizeThreshold)
    • 默认值为0,当不主动设置值时,不管多大的对象都会先在新生代分配内存;
    • 当手动设置了这个值时,如果生成一个大于这个大小的对象(比如一个超大的数组或者其他对象),就会直接在老年代中为这个对象分配内存;
    • G1收集器中有专门的大对象Region,大对象不存在老年代;

上面的几种情况中,分配担保动态年龄判断都是很关键的;通常如果新生代的Survivor区内存设置过小,就可能导致这两种情况频

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值