JVM堆内存中的新生代有什么作用?

1 个回答

  • 王重阳
    不要和差点意思的人周旋。
    ## 作用 - 新生代用于存放大多数新创建、生命周期较短的对象。 - 它依据“大多数对象朝生夕死”的弱分代假说设计,可以在较小区域内快速完成垃圾回收,减少对整个堆的扫描成本。 - 新生代由 Eden 和两个 Survivor 区组成: - **Eden**:新对象优先分配的区域,对象通常在这里创建;Eden 满时会触发 Minor GC。 - **Survivor(From/To)**:保存 Minor GC 后仍然存活的对象,用来缓冲那些经历过几次回收仍未死亡的对象,避免它们过早进入老年代。 ## 原理 - 新对象通常通过指针碰撞或 TLAB(线程本地分配缓冲)在 Eden 中分配,TLAB 可减少多线程分配时的锁竞争。 - 当 Eden 空间不足时触发 Minor GC: - 回收 Eden 和当前 From Survivor 中不可达的对象。 - 将存活对象复制到 To Survivor。 - 回收完成后,From 和 To 交换角色,始终保持一个 Survivor 为空。 - 对象每经历一次 Minor GC 并存活,年龄加 1;达到晋升阈值后进入老年代,默认阈值可通过 `-XX:MaxTenuringThreshold` 控制。 - 如果 Survivor 中相同年龄对象的总大小超过目标占用比例,也可能触发动态年龄判定,让部分对象提前晋升老年代。 - 新生代默认采用复制算法,因为短命对象很多、存活率通常较低,复制少量存活对象的效率较高。
    发布于 2026-10-28 11:17 •IP属地 安徽
    举报
    评论
    收藏