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

虽然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();//执行对象的中止过程

        }

}

//链表实现添加,移除,清空

 

你可能感兴趣的:(nodejs)