垃圾回收
更新:2007 年 11 月
.NET Framework 的垃圾回收器管理应用程序的内存分配和释放。每次您使用 new 运算符创建对象时,运行时都从托管堆为该对象分配内存。只要托管堆中有地址空间可用,运行时就会继续为新对象分配空间。但是,内存不是无限大的。最终,垃圾回收器必须执行回收以释放一些内存。垃圾回收器优化引擎根据正在进行的分配情况确定执行回收的最佳时间。当垃圾回收器执行回收时,它检查托管堆中不再被应用程序使用的对象并执行必要的操作来回收它们占用的内存。
本节介绍了垃圾回收器如何自动管理应用程序中托管对象的内存分配和释放。除此之外,本节还介绍了推荐的设计模式,以用来正确地清理应用程序创建的任何非托管资源。
说明: |
---|
在 .NET Framework 1.0 版中,公共语言运行时 (CLR) 具有一个用于大型对象堆的独立内存管理器。在某些情况下,该内存管理器不将未使用的内存返回给操作系统,在少数情况下,它还会使该内存不能垃圾回收。这样会由于虚拟地址空间碎片而导致内存分配失败。在 .NET Framework 1.1 和 2.0 版中,大型对象堆由称为堆片段的连续内存区域组成,这些区域完全对齐以使虚拟内存碎片减到最少。在垃圾回收过程中,从大型对象中回收的空间被合并起来并置于自由列表中。只包含自由列表项的堆片段被释放,内存被返回给操作系统。对大型对象堆所做的这些更改有效消除了由这种形式的虚拟地址空间碎片导致的内存分配故障。 |
重要说明: |
---|
在内存大于 2GB 的服务器中,可能需要在 boot.ini 文件中指定 /3GB 开关,以避免当内存仍可供系统使用时出现明显的内存不足问题。 |
本节内容
开发人员在内存管理方面的背景
介绍了惯常使用 Visual Basic、C++ 和 COM 的开发人员在转向使用托管代码时应该进行的调整。Finalize 方法和析构函数
介绍 Finalize 方法和析构函数如何允许对象在垃圾回收器自动回收对象的内存之前执行必要的清理操作。弱引用
介绍允许应用程序访问对象,同时也允许垃圾回收器收集该对象的功能。被动回收
介绍如何立即或在下一最佳时间回收对象。滞后时间模式
介绍可确定垃圾回收侵入性的模式。针对共享 Web 宿主优化
介绍在通过承载若干个小型网站共享的服务器上如何优化垃圾回收。垃圾回收通知
介绍如何确定完整垃圾回收何时即将发生以及何时完成。清理非托管资源
介绍推荐的清理非托管资源的设计模式。
参考
System.GC
提供与系统垃圾回收器进行交互的方法。Object.Finalize
允许对象在垃圾回收器回收对象占用的资源之前尝试释放资源并执行其他的清理操作。System.IDisposable
提供资源类的功能。
相关章节
- 垃圾回收技术示例
介绍 .NET Framework 垃圾回收器的功能。