正在阅读:.NET中的垃圾回收(上).NET中的垃圾回收(上)

2004-02-14 09:34 出处:PConline 作者:cloud/CSDN 责任编辑:linjixiong

 导言

       微软声称.NET是一种革命性的编程技术。许多要素使它成为大多数开发人员的首选。本文我们将要讨论一下.NET Framework中一个很主要的优势——内存和资源管理的便捷性。

 关于垃圾回收器

       每个程序都会使用一定次序的资源,或内存缓冲区,或网络连接,或数据库资源等等。实际上,在面向对象环境中,每种类型都被看作是程序的某些有效资源。为了使用这些资源,必须分配部分内存来描述这种类型。

        资源访问按一下步骤进行

  1.为类型分配内存来描述资源。

  2.初始化资源,把资源设置成初始化状态,使资源可用。

  3.通过访问类型实例的成员来使用资源(按需求重复)。

  4.销毁资源状态以清除资源。

  5.释放内存。

   .NET中的垃圾回收器(GC)完全彻底帮助开发人员从追踪内存的使用和确定什么时候释放内中解脱出来。

   Microsoft® .NET CLR (公共语言运行库)要求所有资源都从托管堆中进行分配。你无需释放托管堆中的对象——当应用程序不再需要这些对象时,对象将被自动释放。

 内存不是无限的。垃圾回收器需要执行回收以便释放内存。垃圾回收器的优化引擎会对已做的分配选择最好的回收时间(准确标准由微软提供)。当垃圾回收器执行回收时,它先找出托管堆中不再被应用程序使用的对象然后执行相应操作收回这些对象的内存空间。

  然而,为了进行自动内存管理,GC必须知道根的位子。也就是说,它应该知道一个对象什么时候不再被应用程序使用了。在.NET中,GC是通过一个称之为元数据的东西了解到这些的。.NET中使用的每种数据类型都通过元数据来描述它。在元数据的帮助下,CLR知道内存中每个对象的布局,在垃圾回收的整理阶段给GC提供帮助。没有这些信息,GC将不会知道一个对象在哪儿结束和下一个从哪儿开始。

  垃圾回收算法

  应用程序根(Application Roots)

  每个应用程序都有一套根(Roots)。根标识存储位置,这个位置或者指向一个托管堆的对象,或者指向一个空对象(null)。

键盘也能翻页,试试“← →”键

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品