垃圾回收器(Garbage Collector,简称 GC)是 .NET CLR(公共语言运行时)中的一项重要机制,用于自动管理内存。其主要职责:
GC 回收大致分为三步:
随着GC触发的次数越多,对象迁移的次数也就越多,GC的成本就越高,因为高代(Gen2)内存上存储的对象就越大
所有通过 new
创建的对象都存储在托管堆中,也就是堆内存都由 GC 管理。托管堆是连续内存区域,GC 会自动跟踪对象的生命周期。
也就是平时所说的分代回收,分代的计算方式
为提高效率,GC 将对象分为以下几代:
代(Generation) | 描述 |
---|---|
第 0 代(Gen 0) | 新创建对象,生命周期短 |
第 1 代(Gen 1) | 从 Gen0 存活下来的中期对象 |
第 2 代(Gen 2) | 生命周期长的老对象,回收代价大 |
GC 更频繁地回收 Gen0,较少处理 Gen2。
GC 会在以下场景触发:
GC.Collect()
csharpGC.Collect(); // 强制触发 GC
GC.GetGeneration(obj); // 获取对象所处代
GC.GetTotalMemory(false); // 获取当前托管堆大小
GC.SuppressFinalize(obj); // 禁用对象的析构函数调用
本文作者:xuxuxuJS
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!