请输入您要查询的百科知识:

 

词条 .NET 垃圾收集器
释义

什么是.NET CLR垃圾收集器

垃圾收集器使用户内存管理自动化。在以前的C++中,你必须用“malloc”或者“new”来分配内存,然后在适当的时候释放内存。你必须保证在释放之前内存没有被别人使用,如果你把内存给了别人,往往你就不确定应该何时释放内存了。当你释放了内存,不知道别人正在使用这块内存时,就产生了程序崩溃的问题。所以,当你显式进行“new”和“delete”时,内存管理是一个复杂的问题,并且,此时你的代码不可组合。要么你必须确定对自己的内存有完全的控制,因此,要达到这种完全隔离的目的,你必须在将内存传递给别的模块时进行完全拷贝,这样,别的模块就只对这个完全拷贝的内存负责。要么你就得在某个地方形成对整个内存池的统一的管理,这就是自动化内存管理,这就是垃圾收集器的工作。

.NET CLR 垃圾收集器负责的是什么

垃圾收集器本质上就是负责跟踪所有对象被引用到的地方,关注对象不再被引用的情况,回收相应的内存,并且用高效率的方式来做这件事,很可能其效率甚至高于传统的“new”和“delete”范畴。事实上,我们试图超过“new”和“delete”,因为垃圾收集器给我们提供了新的机会,而你不会对新机会设置限制。举个例子,你必须知道每个对象在何处被引用,你必须确定每个对象是否真的被引用了。而一旦你做到了这一点,你会发现自己可以移动对象,压缩对象占用的内存空间,把对象在整个内存内搬来搬去,因为你知道对该对象的每处引用,你可以修改所有的引用。在C++中这是不可能的。如果我们除了使“delete”自动化外,还是象“new”和“delete”那样管理内存,我们一定会比“new”和“delete”慢,因为我们仅仅增加了额外的开销。但是,做了内存空间的智能压缩之后,我们发现自己的速度能够超过“new”和“delete”,因为我们能够保持非常紧凑,从而形成缓存本地化,页面本地化等等优势,因此,结果很好,尤其是对于非常难以管理的服务器内存来说更是如此。例如,对于服务器堆空间碎片化或者相似的问题来说,事实上,我们做得比过去任何尝试都要好。性能不会随着时间的过去而下降,我们得到了稳定的内存管理速度。

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/3/20 6:22:33