C 引用计数的智能指针有效回收方法[4]
2008-02-23 05:39:53来源:互联网 阅读 ()
图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]
- C 引用计数的智能指针有效回收方法[3] 2008-02-23
- C 引用计数的智能指针有效回收方法[2] 2008-02-23
- C 引用计数的智能指针有效回收方法[1] 2008-02-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash