C#面试题更新 2026-08-03

请解释 C# 中 CLR 的垃圾回收机制是如何工作的,并阐述代(Generation)在其中的作用。

考察说明

考查候选人对 CLR 垃圾回收原理及分代机制的理解深度。

回答思路

  1. 【回答框架 1】CLR 垃圾回收基于分代机制,将托管堆上的对象按存活时间分为 0 代、1 代和 2 代。0 代存放最近分配的对象,回收频率最高;2 代存放长期存活的对象,回收频率最低。
  2. 【回答框架 2】GC 触发时,首先回收 0 代对象,若内存仍不足则提升到 1 代,最后才回收 2 代。这基于弱代假设:大部分对象生命周期短,分代回收可以减少扫描范围,提高效率。
  3. 【回答框架 3】代的作用主要体现在性能优化:通过分代,GC 只需处理年轻代对象,避免每次都扫描整个堆。例如,0 代回收只需处理少量对象,而大对象堆(LOH)的对象通常不移动,避免复制成本。
  4. 【回答框架 4】CLR 支持工作站和服务器两种 GC 模式,分别针对单线程和服务器场景,影响回收的并行性和延迟。例如,工作站 GC 使用一个线程,服务器 GC 为每个 CPU 创建堆,减少竞争。
  5. 【关键点 1】CLR 采用分代回收,代是对象的年龄分层。
  6. 【关键点 2】回收通常从 0 代开始,逐代提升,减少扫描范围。
  7. 【关键点 3】弱代假设支持分代设计:短命对象多,长命对象少。
  8. 【关键点 4】GC 模式(工作站/服务器)影响并发和延迟。
  9. 【易错点 1】分代机制只影响内存回收效率,不改变对象生命周期语义。
  10. 【易错点 2】大对象堆(LOH)不参与代提升,回收时可能产生碎片。