面试题:什么条件会触发 Java 的 young GC?

在Java中,Young GC(年轻代垃圾回收)的触发条件主要与年轻代(Young Generation)的内存使用情况有关。年轻代包括Eden区和两个Survivor区(S0和S1)。以下是触发Young GC的具体条件:


触发条件

  1. Eden区空间不足
    • 当新对象无法在Eden区分配足够的内存时,会触发Young GC。
    • 这是最常见的触发条件,因为大多数新创建的对象都会首先分配到Eden区。
  2. Survivor区空间不足
    • 在Young GC过程中,存活的对象会从Eden区复制到Survivor区。如果Survivor区空间不足,也会触发Young GC。
    • 如果Survivor区无法容纳从Eden区复制过来的存活对象,部分对象可能会直接晋升到老年代。
  3. 对象年龄达到晋升阈值
    • 如果对象在Survivor区经过多次Young GC后仍然存活(即对象的年龄达到一定阈值,默认是15次),这些对象会被晋升到老年代。
    • 虽然这不会直接触发Young GC,但它是Young GC过程中的一个重要行为。

Young GC的过程

  1. 标记存活对象
    • 首先标记Eden区和Survivor区中所有存活的对象。
  2. 复制存活对象
    • 将Eden区和Survivor区中的存活对象复制到另一个Survivor区(S0或S1)。
    • 如果Survivor区空间不足,部分对象会直接晋升到老年代。
  3. 清空Eden区和Survivor区
    • 清空Eden区和原来的Survivor区,为下一次对象分配做准备。

总结

Young GC的触发条件主要是Eden区空间不足,这是由新对象的分配引起的。Young GC的目标是清理年轻代中的无用对象,并将存活的对象复制到Survivor区或晋升到老年代。由于Young GC只针对年轻代,因此它的速度通常较快,频率较高,对应用的性能影响相对较小。

THE END
点赞11 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容