用链表实现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的内存对象管理的更多相关文章
- Java内存管理及对Java对象管理
Java内存管理及对Java对象管理 1Java内存管理 1.1Java中的堆和栈 通常来说,人们会将Java内存氛围栈内存(Stack)和堆内存(Heap). 栈内存用来保存基本类型的变量和对象的引 ...
- C语言中内存的管理
一.动态内存分配与释放 1.为什么要使用动态内存分配,以下看一个实例,关于超市中购买记录的一段程序 #include <stdio.h> #include <string.h> ...
- 《Entity Framework 6 Recipes》中文翻译系列 (24) ------ 第五章 加载实体和导航属性之查询内存对象
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-4 查询内存对象 问题 你想使用模型中的实体对象,如果他们已经加载到上下文中, ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数010,obj,对象管理
<zw版·Halcon-delphi系列原创教程> Halcon分类函数010,obj,对象管理 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“p ...
- 【uTenux实验】内存池管理(固定内存池和可变内存池)
1.固定内存池管理实验 内存管理是操作系统的一个基础功能.uTenux的内存池管理函数提供了基于软件的内存池管理和内存块分配管理.uTenux的内存池有固定大小的内存池和大小可变的内存池之分,它们被看 ...
- 高性能的分布式内存对象缓存系统Memcached
Memcached概述 什么是Memcached? 先看看下面几个概念: Memory:内存存储,不言而喻,速度快,对于内存的要求高,不指出的话所缓存的内容非持久化.对于CPU要求很低,所以常常采 ...
- 分布式内存对象缓存系统Memcached-概述
全面掌握Memcached 1. 概述 Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,是为了加快网站http://www. ...
- [Effective C++ --013]以对象管理资源
这一节基本讲述的是将资源放进管理对象,防止忘记释放资源. 1.一般New和Delete使用场景 void fun() { SimpleClass* pSimpleClass1 = new Simple ...
- 《Effective C++》学习笔记条款13 以对象管理资源
条款 13 :以对象管理资源 例: voidf() { Investment *pInv = createInvestment(); ... ...
随机推荐
- PowerShell实现英汉互译_并保存
代码如下:(介于着色 代码在文末下载) 功能简介: 自动识别英汉输入 返回结果 对于词数小于20的会保存在当前目录下temp_table.txt词文件 大于20的会被识别为句子进行互译 不会存于词文件 ...
- webstorn中的vue文件识别es6代码
webstorn中的vue文件识别es6代码 1.webstorm中es6语法报错,解决方法: 打开 Settings => Languages & Frameworks => J ...
- centos修改hostname
1.临时修改 hostname localhost 2.永久修改 vim /etc/sysconfig/network 修改hostname的值后保存
- wordpress二次开发第一个jquery对比
$(document).ready(function(){ $("input").focus(function(){ $("input").css(" ...
- AngularJS 使用 even 和 odd 表格
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- 菜鸟崛起 DB Chapter 4 MySQL 5.6的数据库引擎
数据库存储引擎是数据库底层的软件组件,我们平常看不到,但是却与我们操作数据库息息相关.DBMS使用数据引擎进行创建.查询.更新和删除数据操作.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能 ...
- oracle 完整性约束的禁用启用以及对表的影响,表的修改和复制
primary key ----表的唯一性约束,不能为空,且不能有重复值 foreign key ----俩表之间的约束,启用之时,在删除数据时需要先删除父表数据,再删除子表数据 禁用方式为:alte ...
- JSP的小心得
问题:Web容器(例如Tomcat)是怎么来执行jsp文件的? 首先它会将放在webapps目录下的jsp文件(这里以hello.jsp为例)翻译成hello_jsp.java文件并编译为hello_ ...
- DOM操作指令整理
DOM操作指令整理: (1) 创建新节点: createDocumentFragment() 创建一个DOM片段 creatElement() 创建一个具体的元素 creatTextNode() 创建 ...
- select()事件默认选中文本框的全部内容,并改变其背景色和文字颜色
1.select()事件默认选中文本框的全部内容 拿到input标签的节点,调用select()方法即可.但是我做的vue项目中调用了此方法有一个bug,单次点击会全选内容,双次点击的时候全选会闪一下 ...