zoukankan      html  css  js  c++  java
  • [导入]换个角度理解GC


    不知不觉中,我在NewsGator Online订阅的Feed已超过100个,每天的阅读压力也在逐渐增加。在使用NewsGator的过程中,发现一个很生动的当代GC(垃圾收集器)实现的类比,拿出来和大家分享,能帮助其他人理解GC当然再好不过,帮不上的话(言下之意你已经知道分代式GC的原理),就当是消遣吧。

    我不知道大家平时怎么用NewsGator来阅读订阅的Feed,我的习惯是先简单浏览一遍,把感兴趣但是暂时没时间看的话题加入My Clippings目录,然后把当前这一页全部标记为已读,继续浏览下一页或者下一个目录。等到空闲的时候,打开My Clippings仔细阅读那些被我加进来的文章和链接。My Clippings目录和其他目录一样,默认都是时间降序排列的,越新的Feed越靠前,而我通常都会把My Clippings里面的Feed数量控制在100以内。

    由于我订阅的Feed很多,涉及到的领域也较广,加上阅读时间有限,第一遍总会有一些原本不是我想细看的溜进My Clippings目录,当我进入My Clippings,发现这样的Feed,对待它们我就是一个字:删。然后会陆续读掉一些Feed,分享一些Feed,这些阅读掉和分享掉的Feed,我也会清理出My Clippings。而我的阅读顺序,默认也是先读新的,再读旧的,因为越新的,越值得关注。我每次打开My Clippings也不一定总能把整个目录从头到尾浏览一遍,不过几乎也总能发现、阅读和清理掉一些Feed。这样通过一伦又一伦的新陈代谢,我的My Clippings目录能够长时间保持在100个条目之内,也总是能够留下我感兴趣但是还没来得及细看或者分享的Feed。

    想想看,一个分代式GC背后的想法和实现不也是这样么?当内存不够或者应用程序主动提出垃圾收集的要求时,GC会在最新的一代对象池中找出垃圾(可能是没有意义的,被错误创建的对象,也可能是被使用掉,失去作用的对象),清理掉,留下的被升级为第二代。为什么GC可以认定第一代中的对象最有可能是垃圾,而第二代、第三代对象相对而言不大可能是垃圾呢?比对一下刚才的例子,没有经历过清理同时又是新加进来的Feed,最有可能是被错误加进来或者已经阅读和分享过的,而经历过一次和多次清理都没有被清除或者分享掉的,则更有可能是那些等待我阅读和分享的Feed。换作对象的概念:那些没有经历过GC、新创建的对象,即第一代对象中,最有可能发现错误创建或者已经处理结束的对象(超出生命周期),而第二代或者更老的对象,经历过GC,却没有被清掉(因为有其他对象还在使用它),则更有可能可能是真正有用的对象。把有限的精力用在真正值得的地方,这就是分代式GC相对传统GC的更高效率的来源。




    大胃 2006-04-27 23:08

    文章来源:http://www.blogjava.net/sean/archive/2006/04/27/43674.html
  • 相关阅读:
    dotnet core部署方式两则:CLI、IIS
    oracle的loop等循环语句的几个用法小例子[转]
    NET Core 环境搭建和命令行CLI入门[转]
    电视不支持AirPlay镜像怎么办?苹果iPhone手机投屏三种方法
    haproxy+keepalived实现web集群高可用性[转]
    论程序员的时代焦虑与焦虑的缓解[转]
    使用C#压缩解压rar和zip格式文件
    C#获取并修改文件扩展名的方法
    普通码农的思维总结【转】
    T4生成实体,单张表和多张表
  • 原文地址:https://www.cnblogs.com/sean/p/387029.html
Copyright © 2011-2022 走看看