AndreaDO

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

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   AndreaDO  阅读(29)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示