垃圾回收机制

crl为了管理托管堆的内存分配和回收问题。设计了垃圾回收机制。

首先,引用类型在托管堆上分配内存。clr假设该堆是无限大的。在应用程序加载的时候进行初始化,关闭的时候进行回收。

但是,堆再大也是有限度的。当托管堆被用完的时候,clr就开始进行垃圾回收。

clr内部保存一个所有对象地址的列表,它会定期检查该表的中的对象,首先假设所有对象都没有被引用

然后检查对象是否被一些跟引用,如果是,放弃如果不是就标记为垃圾。等待回收。

没有被回收的,升级为第一代垃圾。

clr为第一代垃圾分配有限的空间。当该空间被用完时,回收第一代垃圾,从而减少垃圾回收的次数。

被剩下的对象升级为第二代。

clr垃圾共三代。

垃圾回收把程序员从内存管理的繁琐工作中解放出来。

对应托管程序的类型不用程序员自己管理内存。但是对应托管程序使用的本地资源,也就是非托管资源,如i/o操作使用的类型、数据库连接等。

垃圾回收不能对非托管资源进行回收,因此使用该类资源的时候需要手动释放这些资源。

如:

public class Test:IDispose

{

//本地资源,句柄

IntPtr res;

public Test(IntPrt r)

{

res=r
}

public void Dispose()

{

res=IntPtr.Zero;
}
}

原文地址:https://www.cnblogs.com/363546828/p/3137531.html