【JVM专题】年轻代与老年代连环炮

本问题对应的项目链接:高频题回答模版训练

1、为什么要区分年轻代和老年代?

2、哪些对像会进入老年代?

3、什么时候会进行年轻代GC?

4、什么时候会进行老年代GC?

共以下 3 个回答

  • 終达·斯维达尼亚 永久会员 2024年3月14日 下午11:21

    1、为什么要区分年轻代和老年代?

    因为年轻代和老年代的对象存活率有很大的不同,那么对于涉及年轻代和老年代的垃圾回收算法就会相应不同,具体年轻代以标记-复制算法为主,而老年代以标记-整理算法为主。而设计不同的垃圾回收算法也是为了尽可能减少GC的次数,因为每一次GC都会stop the world。

    0 赞同 0 条回复
  • LilyBoy 永久会员 2023年9月17日 上午10:35

    2、哪些对像会进入老年代?
    大对象、回收阈值、x年龄累计的平均大小

    0 赞同 0 条回复
  • 秊 永久会员 2023年8月22日 下午10:07

    1、为什么要区分年轻代和老年代?

    主要是有两个原因,一个是大部分对象的生命周期都很短,只有少部分对象可能会存活很长时间。另一个是垃圾回收会导致 stop the world,也就是应用会暂时停止访问。为了使 stop the world 持续的时间尽可能短以提高并发式 GC 所能应付的内存分配速率,有些垃圾收集器就将对象分成两类,存活时间短的对象所处的区域叫年轻代,存活时间长的对象叫老年代。JDK 8 及以前的垃圾收集器都是有这个分代概念的。

    2、哪些对像会进入老年代?

    一般有两种情况,第一种是先创建的对象太大了,就会直接进入老年代,另一种是对象的年龄太老了,每发生一次 Minor GC,存活的年龄就 +1,达到默认值 15 就会自动晋升成老年代。

    3、什么时候会进行年轻代GC?

    一般在年轻代的 Eden 区空间不足时,就会触发年轻代 GC,也就是 Minor GC。

    4、什么时候会进行老年代GC?

    大约有三种情况,第一次是 Young GC 发生之前,如果老年代的可用内存小于以往 Young GC 后升入老年代的对象的平均大小,此时就带先触发一次 Old GC,腾出更多空间;第二次是 Young GC 触发之后,如果需要晋升老年代的对象在老年代中空间不足,此时还带进行一次 Old GC;第三次是如果老年代的内存使用率超过了 92%,也会直接触发 Old GC。

    总之就是如果老年代空间不足以放下更多对象了,那就带进行 Old GC 腾空间了。

    0 赞同 0 条回复

# 回答此问题

后才能回答