AndreaDO

导航

C# 垃圾回收机制

C# 垃圾回收机制

C#的资源分类

托管资源

C#的申请的内存空间都是在CLR上自动管理,像

string[] arr= new string[10]
//或者new class等等

托管资源是.Net平台CLR提供的内存管理方式,由.Net自动释放,托管资源:栈资源(根据函数运行的时候自动分配释放)、托管堆内存(用户需要的时候new,不需要自动释放)

非托管资源

CLR只能跟踪生存周期,不能决定如何释放资源,例如:数据库链接,文件句柄和指针结果等。

垃圾收集

垃圾收集通过从程序的根对象开始层层遍历在堆上分配的对象,当不再被引用到的对象,即为垃圾被收集,可被引用到的对象被称为Reachable Object。
root对应的对象(全局对象,静态变量,栈上现存变量,CPU寄存器中变量)

Mark-Compact算法

具体分为两个阶段,Mark和Compact
阶段1,标记所有对象都可以回收,找出不能回收的对象,再打上标记。
阶段2,压缩不连续的内存,从heap的基址开始排列。

如图所示
image

到这里C#的垃圾回收就简单介绍到这了

posted on 2024-06-16 21:45  AndreaDO  阅读(43)  评论(0)    收藏  举报