注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

.NET垃圾回收  

2011-11-02 12:45:55|  分类: C# & .NET |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
.NET框架的垃圾回收机制是非常复杂的,但是垃圾回收机制完全可以在没有人工干预的情况下正常工作,如同飞机的自动飞行模式一样。
对象的内存是从托管堆(进程用来储存动态分配对象的一块内存)中分配的,每次分配都会消耗堆中的一些空间,严重的情况下就会耗尽内。理论上来讲,程序会调用垃圾回收器查看是否有一些在内存中未被引用的对象,这些对象是可以回收并释放所占用的空间,从而缩小堆的大小。
问题是,实际上的操作没有这么简单。每个动态创建的.NET框架对象都属于同一代:在应用程序生存期早期创建的对象属于0代,新生的对象归为新生代,将对象分为代,表示不必针对堆中的所有对象运行垃圾回收器,而只需考虑特定对象的年龄。
当0代填满的时候就会进行垃圾回收,死对象被回收,所有未被回收的对象归为第1代,而新生对象被再次添加到0代,垃圾回收器总是先在0代执行回收,以提高效率。如果还没有释放足够的内存,则会移动到下一代执行回收,目前的.NET只支持三代(0,1,2代)。
通常让垃圾回收器决定什么时候回收,但是如果已经确定了代码中确实有可回收对象的话,可以使用System.GC类的Colect方法执行强制回收,或者让该方法执行一次默认的垃圾回收,甚至是指定某一代的对象,如果对对象所属的代比较感兴趣的话,可以使用GC.GetGeneration方法。
  评论这张
 
阅读(706)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016