← 中文资源

简体中文版本

分代垃圾回收

分代回收利用弱分代假说——多数对象朝生夕死——频繁而廉价地回收年轻代,把幸存者晋升到很少回收的老年代。

阅读英文原文

概念定义

堆内生命周期严重偏斜:大多数分配几乎立刻死亡。分代收集器押注这种偏斜——在“回收率近乎全量”的年轻代频繁收集,在“收集昂贵”的老年代很少收集。

工作机制

新对象在 eden 分配;年轻 GC 把幸存者拷进幸存区,若干轮后晋升老年代。老到新的引用会被年轻扫描漏掉,写屏障把它记进记忆集。老年代算法在标记清除、标记压实、并发标记之间取舍碎片与停顿。

使用场景

晋升率与幸存区占用是旋钮:晋升过多说明对象活得超出年轻代该有的样子;幸存区太小则中等寿命对象被反复拷贝。画像分配点,缩短跨越边界的生命周期。

常见误区

分配并非免费但确实便宜——指针碰撞级;贵的在幸存后的拷贝与晋升。全局池化小短命对象会打败分代机制:把廉价的年轻死亡变成老年代压力。中等寿命对象是病理场景——会话级、请求批级——反复幸存、反复付费、却在老代收集前死去。分代假说失效的长尾负载更适合 G1 这类区域收集器或非分代设计。