.NET Framework的垃圾回收器管理应用程序的内存的分配和释放。每次使用new运算符创建对象时,运行时都从托管堆为该对象分配内存。只要托管堆中有地址空间可用,运行时就会继续为新对象分配空间。但是,内存不是无限大的。最终,垃圾回收器必须执行回收以释放一些内存。垃圾回收器优化引擎根据正在进行的分配情况确定执行回收的最佳时间。当垃圾回收器执行回收时,它检查托管堆中不再被应用程序使用的对象并执行必要的操作来回收它们占用的内存。
PS:在.NET framework 1.0版本中,公共语言运行时(CLR)具有一个用于大型对象堆的独立内存管理器。在某些情况下,该内存管理器不将未使用的内存返回给操作系统,在少数情况下,他还会使该内存不能垃圾回收。这样会由于虚拟地址空间碎片而导致内存分配失败。在.NET framework1.1和2.0版本中,大型对象堆由称为堆片段的连续内存区域组成,这些区域完全对齐以使内存碎片减到最少。在垃圾回收过程中,从大型对象中回收的空间被合并起来并置于自由列表中。只包含自由列表项的堆片段被释放,内存被返回给操作系统。对大型对象堆所做的这些更改有效消除了由这种形式的虚拟地址空间碎片导致的内存分配故障。
浙公网安备 33010602011771号