您的位置:首页 > 其它

CH19 自动内存管理 .net复习课

2009-03-02 20:35 197 查看
19.1 垃圾收集平台基本原理解析

- 访问资源需要的几个步骤

- newobj为实例飞配一定的内存空间(在托管堆上)

- 初始上一步所得的内存

-使用资源

- 销毁资源状态

- 释放内存

- CLR预留一块连续的地址空间:托管堆。在其上维护一个NextObjPtr指针。

- newObj指令会让CLR做下面几件事情

- 技术所有字段所需要的空间

- 再加上附加字段(方法指针表和SyncBlockIndex,各占32位,64位中占64位)

- 检查是否满足。不满足提交物理内存,满足则让newObj返回引用类型的指针,再更新nextObjPtr指针。

- 对于以上操作的方式,我们是假设内存空间是无限的。这个是不可能滴!托管堆中的内存空间会用完。我们需要垃圾收集来释放掉不可达的内存空间。

19.2 垃圾收集算法

- 每个应用程序都有根,根就是一个个存储位置。

- JIT编译器会创建一张内部表,其中包括了根和内存地址段之间的映射关系。

- 垃圾收集器根据这张表来生成一个可达对象的图,若一个对象引用到了另一个对象,则添加一条路径(图中不允许出现回路)

- 释放掉内存中的不可达对象

- 压缩内存

- 再更新根和内存段之间的对应关系

*注意

- 当一个根被标注为不可达时,CLR并不保证它能够存活到方法调用结束,除非在Debug状态,或者运用了System.Diagnostics.Debuggable特性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: