C 引用计数的智能指针有效回收方法[4]

2008-02-23 05:39:53来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

  图4描述了系统中类CScheduler、CJobDefPtr、CJobDef、CReferableCache之间的交互,类CReferableCache具备静态成员方法getUniqueTag()、addObject()、deleteObject()。当一个对CJobDef的智能指针创建时,如下:

以下是引用片段:
CJobDefPtr jobDefPtr = new CJobDef

  CScheduler会构造CJobDefPtr和一个CJobDef对象,当对象构造时,会通过CJobDef基类的CReferable构造函数调用getUniqueTag()方法,这就为每个CJobDef对象创建了一个唯一的识别标记(tag)。接下来,CJobDef对象被赋给CJobDefPtr对象,后者会调用他自己的set()方法把CJobDef对象添加进来。

  当调用CJobDefPtr赋值操作符函数时,也会调用addObject()方法,假如是第一次赋值的话,他会把CJobDef对象添加进全局CReferableCache;当智能指针被请求替换由tag识别的他内部的对象引用时,impersonate()方法会调用getObject()方法,假如impersonate()方法未找到CReferableCache中标记的对象,那么,CJobDefPtr对象会替换他的内部对象标记,并把他自身添加到CReferableCache缓存集中;最后,当CJobDefPtr被删除及对象的引用计数为零时,deleteObject()方法此时会被调用。

  在此所描述的事件调度系统,一般使用在市场咨询数据公司中,其会在网络集群工作站上触发计算任务,当从世界各处的零售商汇集所需信息之后,在每周的三天之中,都会触发计算任务,而这三天中的任意时刻,系统可能也要在集群工作站上运行超过20万个任务。因此,软件在合理内存及CPU消耗的前提下,支持重新启动,就显得很重要了。表1显示了在系统中运行着多个计算任务时,事件调度守护进程在每次重启后的内存消耗,在系统重启后,较小的内存消耗要归功于软件中使用了上文方法来串行及反串行化不常用的类对象的那些模块。当任务完成时,内存最终将被回收。

  表1:在软件每次重启后的调度系统所用内存大小

运行任务数 软件重启前的内存占用大小 软件重启后的内存占用大小
5000 25M 32M
100000 370M 413M
200000 730M 795M

[1] [2] [3] [4]




标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: C 引用计数的智能指针有效回收方法[2]

下一篇: C 引用计数的智能指针有效回收方法[3]

热门词条
热门标签