10 C# 第九章 引用类型 ------ 垃圾回收和资源清理

本文深入探讨了C#中引用类型的资源管理,包括垃圾回收的原理、标识与回收过程、如何自调用垃圾回收器以及其特点。此外,文章还介绍了资源清理的重要方面,如终结器、确定性终结和延迟初始化,这些内容对于理解和解决程序退出时可能出现的异常问题至关重要。
摘要由CSDN通过智能技术生成

这里的内容主要是关于引用类型的资源释放的,概念性的东西较多,有时候程序在退出时出现异常不好定位时,可以考虑一下是不是这方面的问题。

垃圾回收

垃圾回收是一个" 运行时"的核心功能,它的作用是回收不再被引用的对象所占用的内存。这里垃圾回收只负责回收内存,不负责清理资源(例如:文件句柄,数据库连接,网络端口等)垃圾回收还会根据是否存在任何引用来决定要清除什么。垃圾回收 只针对对象,分配在堆上的内存,如果维持对一个对象的引用时,回收器就无法回收了。


原理

垃圾回收器采用的是 mark-and-compact 算法 (mark 是指先确定所有可达对象,compact是指移动这些对象,使他们紧挨着存放)类似于磁盘碎片整理。在一次垃圾回收周期开始时,它要识别对象的所有的根引用(来自于静态变量, CPU寄存器, 局部变量或参数的实例的引用)。基于根引用列表,垃圾回收器就能遍历每个根引用标识的一个树形结构,并递归确定所有根引用指向的对象。这样垃圾回收器就能识别出所有可达对象。(正在被使用中的对象)


垃圾标识和回收

在执行垃圾回收时,垃圾回收器不是枚举所有访问不到的对象,它是通过移动所有相邻的可达对象来执行垃圾回收的。这样不可达对象(垃圾)的内存空间,就会被可达对象覆盖。为了定位和移动可达对象,要求系统在垃圾回收器运行期间保持一致的状态。为此,进程中所有的 托管线程都会暂停。会造成应用程序出现短暂的停顿ÿ
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值