什么是托管资源,什么是非托管资源

托管资源

由公共语言运行时(CRL)控制的内存资源,系统可以自行分配和回收的资源;例如程序中分配的对象,作用域内的变量等

非托管资源

是CLR不能控制或者管理的部分,例如文件读取,数据库连接,窗口句柄,图标,打印机资源等,必须在调用或使用后,通过 Finalize或Dispose 手动释放.文件读取和数据库连接需要调用Close()方法关闭并释放资源.

注意,不能在析构函数中释放托管资源,因为析构函数是有垃圾回收器调用的,可能在析构函数调用之前,类包含的托管资源已经被回收了,从而导致无法预知的结果。

GC垃圾回收器

当系统内存资源匮乏时,它就会被激发,然后自动的去释放那些没有被使用的托管资源。

工作原理

遍历托管堆中的对象,标记被使用对象(没被使用的就是所谓的垃圾),然后把可达对象转移到一个连续的地址空间(也叫压缩),其余的所有没用的对象内存被回收掉。

GC进行垃圾回收时的主要流程是?

(1)标记 ,找到并创建所有活动对象的列表。

(2)重定位 ,用于更新对将要压缩的对象的引用。

(3)压缩 ,用于回收由死对象占用的空间,并压缩幸存的对象。 压缩阶段将垃圾回收中幸存下来的对象移至段中时间较早的一端。

GC在哪些情况下回进行回收工作?

(1)系统具有低的物理内存。 这是通过 OS 的内存不足通知或主机指示的内存不足检测出来。

(2)由托管堆上已分配的对象使用的内存超出了可接受的阈值。 随着进程的运行,此阈值会不断地进行调整。

(3)调用 GC.Collect 方法。 几乎在所有情况下,你都不必调用此方法,因为垃圾回收器会持续运行。 此方法主要用于特殊情况和测试。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值