JVM——16.Full GC 相关总结

文章目录

  • 1. 对象进入老年代的情况
  • 2. 触发 Full GC 的情况
  • 3. 频繁 Full GC 的情况
  • 4. 如何定位及解决频繁 Full GC

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

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

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

你可能感兴趣的:(jvm,jvm实战,java,java,jvm,java虚拟机,jvm.gc)