CLR的终结操作Finalizer

本文介绍了.NET2.0中CLR的终结操作Finalizer的工作原理及流程。主要包括:对象创建前将带有Finalizer方法的对象指针放入终结链表;垃圾回收过程中处理这些指针,将对象移至终结可达队列;调用Finalizer方法并等待下次垃圾回收。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值