zoukankan      html  css  js  c++  java
  • 用链表实现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();//执行对象的中止过程
            }
    }
    //链表实现添加,移除,清空
  • 相关阅读:
    VB6SP6极度精简兼容绿色版
    Upnp资料整理
    RevMan简单入门指南
    小程序 --flex
    IV
    2017-10-27错误日志
    170616_2
    170616
    2017-06-07
    111111112222
  • 原文地址:https://www.cnblogs.com/XmodYgetZ/p/4561422.html
Copyright © 2011-2022 走看看