加载中...

| 中文名 | 分代垃圾回收 |
| 外文名 | Generational GC |
| 理论基础 | 弱分代假说 |
| 主要分代 | 新生代、老年代 |
| 典型应用 | JVM、.NET、V8 |
分代垃圾回收是一种依据对象存活时间将堆划分为多个代进行分别管理的垃圾回收策略,其核心思想是对生命周期短的对象高频回收、对生命周期长的对象低频回收,以最小代价换取最大回收收益。
大量实践统计发现,程序中绝大多数对象在创建后很快就变得不可达,只有少数对象会长期存活,这一现象被称为弱分代假说。分代垃圾回收正是利用这一规律,把内存分成新生代和老年代,分别采用不同的回收频率和算法,避免每次都扫描整个堆。它是 Java 虚拟机、.NET CLR、V8 等主流运行时的经典设计。
新生代常再细分为一个 Eden 区和两个 Survivor 区。对象先在 Eden 分配,回收时把存活者复制到 Survivor,反复筛选;年龄达到阈值后晋升老年代。这种复制方式对短命对象极为高效,因为只需处理少数幸存者。
问:什么是 Minor GC 和 Major GC?答:Minor GC 只回收新生代,速度快、频率高;Major GC 或 Full GC 回收老年代乃至整个堆,耗时更长、频率更低。
问:为什么需要卡表?答:回收新生代时必须找出所有指向它的引用,若逐一扫描老年代代价太大;卡表把老年代按块记录是否存在跨代引用,只需扫描被标脏的块即可,大幅提速。

| 中文名 | 分代垃圾回收 |
| 外文名 | Generational GC |
| 理论基础 | 弱分代假说 |
| 主要分代 | 新生代、老年代 |
| 典型应用 | JVM、.NET、V8 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧