用链表实现nodejs的内存对象管理

虽然javascript拥有垃圾收集,可是垃圾收集机制并不会自动释放持久对象,好比websocks链接。javascript

为了可以在某些特定状况下停止一些链接(好比内存不足),显然要创建全局的对象管理器进行管理。java

显而易见,双向链表是最符合管理这类对象的数据结构。node

这里实现了增长对象,删除某个对象,以及释放全部对象的方法。web

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();//执行对象的停止过程
        }
}
//链表实现添加,移除,清空
相关文章
相关标签/搜索