CLR的垃圾回收机制 (一)
CLR的垃圾回收机制 (一) 从这节开始就涉及CLR 最有意思的地方了,也是CLR 思想的核心部分,比较难理解,要反复思考才能有收获。这节是我对CLR的垃圾回收的整理,应用程序是如何构造新对象,托管堆如何控制这些对象的生存期,以及回收这些对象的内存。本节的内容主要还是参考CLR via C# 这本书,还有就是蒋金楠的博文。 我们先大致了解一下CLR 中的资源概念、以及资源的生存周期 CLR的垃圾回收机制用于清理废弃的资源,这些资源例如文件、网络连接、socket、数据库连接、内存等。在面向对象的环境中,每个类型都代表可供程序使用的一种资源。要使用这些资源,必须为代表资源的类型分配内存,以下是访问一个资源所需要的步骤。 1 调用IL 指令 newobj ,为代表资源的类型 分配内存 (一般使用C# new 操作符来完成)。 2 初始化内存 ,设置资源的初始状态并使资源可使用。类型的实例构造器负责设置初始化状态。 3 访问类型的成员来 使用资源。 4 摧毁资源 的状态以进行清理。 5 释放内存 。垃圾回收器独自负责这一步。 那应用程序是如何创建对象的呢?我们一步一步来解释这个问题 。C# 的new 操作符导致CLR 执行以下步骤。 1 计算类型的字段所需要的字节数。 2 加上对象的开销所需要的字节数。 每个对象都有两个开销字段:类型对象指针和同步块索引。32位应用程序,每个对象需要8