用鏈表實現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();//執行對象的停止過程
        }
}
//鏈表實現添加,移除,清空
相關文章
相關標籤/搜索