说说.NET编程过程中的垃圾回收

时间:2008-10-07 12:07:55  来源:第二电脑网上收集  作者:

  第二电脑网导读:用多讲。但可能对于C++程序员,得说上两句。 对于内存管理,C++程序员总是又爱又恨。爱来源于对能完全控制内存的自豪。恨是因为来无影去无踪的内存读写错误、内存泄漏。好了,C++程序的福音到了,.NET中,凡是拖管方式分配的内存。完全由系统回收,开发者无需理会。这实在是令人振奋不已。(嘿,慢着,这世界上从来没有免费的午餐,你当然会为此付出代价地)。   
  正文:

 从技术角度上讲,垃圾回收无疑是最具神秘色彩的。以前都只闻其名,看了一下书,算是有了一些最基本的认识。

  下面列举一下俺从学习中总结出的几点:   

  1:垃圾回收的用途,优势。

  这个,似乎不用多讲。但可能对于C++程序员,得说上两句。

对于内存管理,C++程序员总是又爱又恨。爱来源于对能完全控制内存的自豪。恨是因为来无影去无踪的内存读写错误、内存泄漏。好了,C++程序的福音到了,.NET中,凡是拖管方式分配的内存。完全由系统回收,开发者无需理会。这实在是令人振奋不已。(嘿,慢着,这世界上从来没有免费的午餐,你当然会为此付出代价地)。   

  2:垃圾回收的原理

  说到原理,不可能一两句话说清。偶只能简单描述一下,具体可自已去看MSDN资料。

  首先,托管代码为引用类型分配的内存在托管堆中,当托管堆到达一定满度(容量)时,执行垃圾收集算法。

  2.1:垃圾回收算法依赖于对源码编译时建立的对象/地址表,根据程序当前运行的执行点,进行智能判定,确定已无用的对象内存,进行收集,进行必要压缩,重新指定待分配内存在首地址。未收集的打上标记,提升级别。

  2.2:级别一般是三级。每级设置回收触发条件的不同阀值,达到阀值,开始收集。有资料将其称为代龄。注意:大尺寸的对象总被认为是最高代龄的对象(第2代)。

  2.3:对于回收对象,如果实现了Finalize,在收集前,会利用复苏机制,对其复苏,调用终止化方法,然后再回收。

  2.4:.NET支持弱引用机制,对于弱引用,垃圾回收有不同对待。弱引用主要用于特珠性况下的节省内存。

  令我感兴趣的是垃圾回收的算法,按照原理可以看出,在生存期内的对象也有可能被回收,这正是我前文说过的它的效率高于C++的原因之一。另外,由于内存成块,连续,它的收集的速度非常之快。


"说说.NET编程过程中的垃圾回收"由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/ASP/2008-10-07/3067.html


关键字:

关于《说说.NET编程过程中的垃圾回收》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td