c#垃圾回收机制

在现在所学的c#中,就浅谈一下关于微软给它所设置的垃圾回收机制吧。

c#的垃圾回收机制,其实我不建议去手动回收,因为微软有它自己的一套垃圾回收体制,如果人为干预的话,会影响它的工作次序。所以说我认为人为去给它手动回收的效率肯定要低于它自动回收的效率的。但是他为什么还要有手动回收的机制的,当然,肯定是有用的,比如说你要创建一个很大的东西,却又不希望他 因为内存的问题而中途出现别的一些小状况之类的,这时就要用手手动垃圾回收机制(GC.Collect())了。当然人们经常所说的Dispose()方法并不是释放对象的内存资源,而是告诉GC这个对象可以回收了。当然对于一些很占用资源并且使用完后可以立即进行释放的东西,应该写在一个作用域(using)中,这些不多说,今天我想说的就是c#自身的垃圾回收机制,别的就下次再谈吧。

微软在c#设定中,给内存的使用上创立了一个“代”的概念。一共可以分为三代。什么是代呢,就是将系统的内容有规律的分为三份,当然大小并不是相等的。通常情况是0代小,1代中,2代最大。而我们手动调用的GC.Collect()无参方法的时候,它自动回收的是0代内存。也就是说,这个方法也可以是有别的参数,就是重载,比如调用

GC.Collect(1)的时候,他就回收1代的内存了。那么这个代的创建到底有什么好处呢?那么我就稍微的分析一下他的工作程序。
	当我们开始使用内存,也就是创建对象的时候,它都会默认的使用0代中的内存,一直到占满为止。当满了后,又有一个对象需要创建,它会怎么存?存在1代中吗?其实不是这样的,这时它会开始进行对0代内存的垃圾回收。它会开始遍历0代内存中的每一个元素,会把0代内存中的每个元素当作是垃圾元素(也就是没用的元素)开始遍历。当碰到有用的内存时,它会标记一下,然后把它移动到1代内存中,然后遍历完成后,0代内存中,也就空了。你那个放不下的元素,也就可以放进来了。然后接下来就和刚才一样了。当1代内存也满了之后呢,就像0代内存满了一样的,将有用的元素放进2代内存中,并清空1代。然后再和刚才一样。一般来说2代内存比较大,也不容易满。但是一旦2代满了之后,再也放不下的时候,程序就会抛出异常了。当然也有特殊情况。比如一些比较大的元素,就可以直接放进2代内存中了,不用经过0代和1代。那就比较深了,咱们浅谈,也就了解一下就ok了,至于更深层的,那感兴趣的就自己研究吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值