minor gc晋升老年代阈值

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。https://store.amazingmemo.com/chapterDetail/1685324709017001

在Java的垃圾回收中,Minor GC(年轻代垃圾回收)是指针对年轻代(包括Eden区和Survivor区)的垃圾回收操作。当年轻代空间不足时,会触发Minor GC来回收无用对象。

在Minor GC中,对象会被分为幸存者和非幸存者两类。幸存者又分为幸存者0区和幸存者1区。每次Minor GC后,仍然存活的对象会被移动到另一个幸存者区,而不会被清理。

老年代(Tenured/Old Generation)是存放长时间存活的对象的区域。为了避免频繁地将对象从年轻代晋升到老年代,JVM引入了一个阈值来控制对象晋升的条件。这个阈值通常被称为晋升老年代的阈值或晋升年龄阈值(Promotion Threshold/Age Threshold)。

具体的晋升老年代阈值可以根据不同的JVM实现和配置进行调整,但一般情况下,对象需要达到一定的年龄才能晋升到老年代。默认情况下,HotSpot虚拟机中的阈值是15,即对象在经过15次Minor GC后才有可能晋升到老年代。

当对象达到晋升老年代的阈值时,它将被晋升到老年代,并且在老年代中继续存活。这样可以保证只有长时间存活的对象才会占用老年代的内存空间,减少了老年代的内存碎片和垃圾回收的频率。

需要注意的是,晋升老年代的阈值是可以通过JVM参数进行调整的,如-XX:MaxTenuringThreshold参数可以设置晋升老年代的最大阈值。调整晋升老年代阈值的设置应该根据具体应用的内存使用情况和性能需求进行优化。

最后更新于