用链表实现nodejs的内存对象管理
2015-06-08 17:05
197 查看
虽然javascript拥有垃圾收集,但是垃圾收集机制并不会自动释放持久对象,比如websocks连接。
为了能够在某些特定情况下中止一些连接(比如内存不足),显然要建立全局的对象管理器进行管理。
显而易见,双向链表是最符合管理这类对象的数据结构。
这里实现了增加对象,删除某个对象,以及释放所有对象的方法。
为了能够在某些特定情况下中止一些连接(比如内存不足),显然要建立全局的对象管理器进行管理。
显而易见,双向链表是最符合管理这类对象的数据结构。
这里实现了增加对象,删除某个对象,以及释放所有对象的方法。
var manager=module.exports=function(){ this.head={"next":null}; this.last=this.head; } manager.prototype.add=function(obj){//添加节点 var prev=this.last; var newlast={"prev":prev,"next":null,"obj":obj}; prev.next=newlast; this.last=newlast; return newlast;//对象移除时使用的句柄 } manager.prototype.remove=function(node){//被对象的中止过程调用移除节点 var prev=node.prev; var next=node.next; prev.next=next; if (next!=null) {next.prev=prev;} node.prev=null; node.obj=null; node.next=null; } manager.prototype.free=function(){//全部释放,如果加一个计数器可以实现释放指定数量的节点,您可以试试 var cur; while((cur=this.head.next)!=null){ cur.obj.end();//执行对象的中止过程 } } //链表实现添加,移除,清空
相关文章推荐
- Node.js是一个事件驱动I/O服务端JavaScript环境
- puppet学习笔记之node/package/service/file/user/group/cron/exec管理
- IIS部署Nodejs步骤
- Hadoop中namenode/datanone没有启动
- nodejs - 如何完全更新
- leetcode 日经贴,Cpp code -Count Complete Tree Nodes
- Hadoop集群中启动namenode失败的解决办法
- leetcode 24 -- Swap Nodes in Pairs
- root.sh Fails on the First Node for 11gR2 Grid Infrastructure Installation
- node.js学习总结(不定期更新)
- nodejs express 框架使用
- Hadoop集群安全性:Hadoop中Namenode单点故障的解决方案及详介AvatarNode
- Populating Next Right Pointers in Each Node I, II
- npm and node 的一些问题
- [leetcode][tree] Count Complete Tree Nodes
- inode理解
- 磁盘inode不足,使用xfs文件系统
- LeetCode Count Complete Tree Nodes
- leetcode[19]:Remove Nth Node From End of List Total
- node.js中关于使用formidable模块实现文件上传至指定目录的问题