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的基址开始排列。
如图所示
到这里C#的垃圾回收就简单介绍到这了
标签:C#,托管,回收,对象,垃圾,资源 From: https://www.cnblogs.com/AndreaDO/p/18251258