MST

星途 面试题库

面试题:C#中垃圾回收器(GC)如何确定对象是否可以被回收

请阐述C#垃圾回收器判断一个对象是否符合回收条件的具体机制和流程。
27.6万 热度难度
编程语言C#

知识考点

AI 面试

面试题答案

一键面试
  1. 根对象定义
    • 垃圾回收器将一些特定对象视为“根对象”。这些根对象包括:
      • 全局变量,即应用程序域中全局范围内可访问的变量。
      • 栈上的局部变量,比如方法内部声明的变量。
      • CPU寄存器中的变量。
  2. 标记阶段
    • 垃圾回收器从根对象开始遍历。它使用有向图的方式,从根对象出发,沿着对象之间的引用关系,标记所有可达的对象。
    • 例如,若根对象A引用对象B,对象B引用对象C,那么A、B、C都会被标记为可达对象。
  3. 未标记对象判断
    • 在标记完成后,没有被标记的对象则被认为是不可达对象。
    • 不可达对象就符合垃圾回收的条件,因为从根对象出发无法访问到它们,意味着程序不再有途径使用这些对象。
  4. 回收阶段
    • 垃圾回收器会在合适的时机回收这些符合条件(不可达)的对象所占用的内存空间,将这些内存归还给系统,以便重新分配使用。
    • 同时,垃圾回收器可能会对内存进行压缩整理,将存活对象紧凑排列,减少内存碎片,提高内存使用效率。