垃圾回收

更新:2007 年 11 月

.NET Framework 的垃圾回收器管理应用程序的内存分配和释放。每次您使用 new 运算符创建对象时,运行时都从托管堆为该对象分配内存。只要托管堆中有地址空间可用,运行时就会继续为新对象分配空间。但是,内存不是无限大的。最终,垃圾回收器必须执行回收以释放一些内存。垃圾回收器优化引擎根据正在进行的分配情况确定执行回收的最佳时间。当垃圾回收器执行回收时,它检查托管堆中不再被应用程序使用的对象并执行必要的操作来回收它们占用的内存。

本节介绍了垃圾回收器如何自动管理应用程序中托管对象的内存分配和释放。除此之外,本节还介绍了推荐的设计模式,以用来正确地清理应用程序创建的任何非托管资源。

说明:

在 .NET Framework 1.0 版中,公共语言运行时 (CLR) 具有一个用于大型对象堆的独立内存管理器。在某些情况下,该内存管理器不将未使用的内存返回给操作系统,在少数情况下,它还会使该内存不能垃圾回收。这样会由于虚拟地址空间碎片而导致内存分配失败。在 .NET Framework 1.1 和 2.0 版中,大型对象堆由称为堆片段的连续内存区域组成,这些区域完全对齐以使虚拟内存碎片减到最少。在垃圾回收过程中,从大型对象中回收的空间被合并起来并置于自由列表中。只包含自由列表项的堆片段被释放,内存被返回给操作系统。对大型对象堆所做的这些更改有效消除了由这种形式的虚拟地址空间碎片导致的内存分配故障。

重要说明:

在内存大于 2GB 的服务器中,可能需要在 boot.ini 文件中指定 /3GB 开关,以避免当内存仍可供系统使用时出现明显的内存不足问题。

本节内容

参考

  • System.GC
    提供与系统垃圾回收器进行交互的方法。

  • Object.Finalize
    允许对象在垃圾回收器回收对象占用的资源之前尝试释放资源并执行其他的清理操作。

  • System.IDisposable
    提供资源类的功能。

相关章节