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的基址开始排列。
如图所示
到这里C#的垃圾回收就简单介绍到这了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律