2006-09-06

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

来源: CSDN 作者:佚名 评论 0 条
 

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

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

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

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

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

  2:垃圾回收的原理

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

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

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

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

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

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

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


(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:ASP.NET底层架构探索之IE6的革新  
下一篇:根据身份证判断性别和生日
    评论加载中…
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号