.Net垃圾回收机制

 

Finalize,析构函数,Dispose,Close 

语法方面

每个类都会继承Object基类的Finalize方法,也可以重写它;但是Finalize方法比较特殊,不能像普通方法那样使用override关键字重写。Finalize(){ ~Class };调用Finalize就是调用类的析构函数;

如果类没有析构函数,调用Finalize方法实际上什么都没执行。如果你想重写Finalize方法,就为类添加析构函数即可;类的析构函数能自动调用基类的Finalize方法;

可以说Finalize方法就是析构函数;

Close(){Dispose()};

托管资源和非托管资源

托管资源

是指.NET可以自动进行回收的资源,主要是指托管堆上分配的内存资源。托管资源的回收工作不需要人工干预,由.NET运行库在合适时机(感到内存不足)调用垃圾回收器进行回收。

非托管资源

是指.NET不知道如何回收的资源,最常见的一类非托管资源是包装了操作系统资源的对象,例如文件,窗口,网络连接,数据库连接,画刷,图标等。

这类资源,垃圾回收器在清理的时候会调用Object.Finalize()方法。默认情况下,方法是空的,对于非托管对象,需要在此方法中编写回收非托管资源的代码,以便垃圾回收器正确回收资源。

在.NET中,Object.Finalize()方法是无法重载的,编译器是根据类的析构函数来自动生成Object.Finalize()方法的,所以对于包含非托管资源的类,可以将释放非托管资源的代码放在析构函数。

垃圾回收机制

回收一个不含托管资源的对象

1,调用类的Finalize方法,因为无非托管资源

2,

原文地址:https://www.cnblogs.com/maoshuyi/p/9751007.html