代码改变世界

Effective C# 学习笔记(基础篇).NET 资源管理基础

2011-07-04 23:05  小郝(Kaibo Hao)  阅读(331)  评论(0编辑  收藏  举报

.net 框架中的GC回收机制是这样的,首先GC会通过一个应用对象树形结构来管理所有被应用引用的对象,对于没有被应用引用的对象将被垃圾回收,而其垃圾回收对象的顺序是没有被控制的。GC跑在自己的线程上,其每次运行都会整理堆空间,使未使用的堆空间变得连续。

 

基于以上机制,对于Finalizers析构来说,其析构执行的时间也是不确定的,所以尽量不要在托管代码中使用Finalize处理析构事宜,但可以析构非托管对象。

 

Generation标记

由上一垃圾回收后产生的新对象其 Generation 值为0 (收集初始值:256K)

由上一垃圾回收后第一次存活下来的对象其Generation的值为1 (收集初始值:2M)

由两次或以上垃圾回收后存活下来的对象其Generation的值为2 (收集初始值:10M)

0一般可能是 局部变量

12一般可能是成员变量 全局变量

GC通过限制检查12值的对象的次数来提高回收效率 10%的几率检查1标记的对象,1%的几率检查2标记的对象