CLR的终结操作Finalizer

来源:互联网 发布:杰克逊总统知乎 编辑:程序博客网 时间:2024/06/03 14:05

 

终结操作的步骤:
.NET2.0中CLR的 终结操作Finalizer非常有用,可以确保托管对象在释放内存的同时不会泄漏本地资源。
以下是《框架设计(第2版):CLR Via C# 》相关章节的总结,图取自该书。
1在一个对象被new之前,如果该对象的类定义了Finalizer方法,则该对象的一个指针被放到终结链表中。
2在回收器开始工作时,遍历堆中不可达对象,将其视为可回收的垃圾。同时搜索终结链表,如果终结链表有不可达对象的指针,则该对象不能马上被释放,因为在释放之前必须调用Finalizer方法。该对象的指针被转移至终结可达队列中,暂时不释放其内存。
3所有不可达的没有Finalizer方法的对象被垃圾回收器回收后,含有Finalizer方法的对象调用Finalizer方法,称为真正的垃圾。等待下一次的垃圾回收。


 

原创粉丝点击