.NET Framework 开发人员指南
垃圾回收

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

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

Note注意

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

Note要点

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

本节内容

开发人员在内存管理方面的背景

介绍了惯常使用 Visual Basic、C++ 和 COM 的开发人员在转向使用托管代码时应该进行的调整。

Finalize 方法和析构函数

介绍 Finalize 方法和析构函数如何允许对象在垃圾回收器自动回收对象的内存之前执行必要的清理操作。

清理非托管资源

介绍推荐的清理非托管资源的设计模式。本节提供以下任务的代码示例:

强制垃圾回收

介绍如何以及何时强制垃圾回收器执行回收。

相关章节

GC 类

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

Object.Finalize 方法

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

IDisposable 接口

提供资源类的功能。

垃圾回收技术示例

介绍 .NET Framework 垃圾回收器的功能。

标记 :


Community Content

Ray Zhang MS
垃圾收集
由于手工垃圾收集(e.g.: GC.Collect())可能破坏垃圾收集器的自动隔代收集机制,所以可能导致手动垃圾收集后效率更低。
标记 : gc 垃圾收集

Page view tracker