.net C#垃圾回收

4 篇文章 0 订阅

类比:
自己去拿盘子 = 申请内存
用完之后自已放到残渣中 = 手动释放
阿姨来回收 = 自动回收(比如垃圾太多了,新客户来了)
自己叫阿姨来回收 = 手动调用自动回收

CLR的一个核心功能–垃圾回收
垃圾回收的目的:提高内存利用率
垃圾回收器,只回收托管堆中内存资源,不回收其他资源(数据库连接、文件句柄、网络端口)
什么样的对象才会被回收?
(1) 没有变量引用的变量,表示可以被回收了
什么时候回收
(1) 不确定,当程序需要新内存的时候开始执行回收
(2) GC.Collect()手动调用回收。不建议使用,垃圾回收时会暂停一下(非常短暂)
垃圾回收器中"代"的概念:
(1) 共3代:第0代,第1代,第2代
GC.Collect(0);//回收第0代
(2) 各代的回收频率:第0代最高,其次第1代,再次第2代。也就是说越老的对象生存几率越大
第0代,第1代,第2代指定固定大小的空间
创建对象时默认往前代(第0代)放入,如果第0代没有空间了,开始准备垃圾回收,
其中第0代有些对象因为还有引用所以释放不了,就往后代(第1代)放。这时候第0代就没有东西了。这个时候新对象就放入时就依然进入第0代,如果第0代又满了的话,就开始垃圾回收第0代,如果到后面第1代满了,开始回收第1代,第1代存活下来的就放到第2代了。如果到后面第2代满了且都活着,那么这个时候第1代因为满了还有一些释放不了的需要放到第2代因为第2代空间满了进不去。这个时候会对每代开始尝试扩容。如果最后扩容不了,开始抛异常
net中垃圾回收机制:mark-and-compact(标记和压缩),一开始假设所有对象都是垃圾
除了内存资源外其他资源怎么办?或则Dispose

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值