雖然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();//執行對象的停止過程 } } //鏈表實現添加,移除,清空