https://github.com/joyent/node/blob/master/lib/freelist.js
制作破坏方法非常危险.我建议如果你关心这个,那么你使用require('freelist')并尝试在使用后回收内存 - 这就是我在net.js中所做的
例如,它在https://github.com/joyent/node/blob/master/lib/http.js中使用,但我仍然没有完全得到它.如何使用这个模块的一个例子是甜蜜的.
这是管理经常创建和销毁的对象的重用的非常简单的方法.当没有当前未使用的对象可用时,空闲列表仅创建新对象,减少内存占用而无需等待垃圾收集等.使用它涉及三个简单步骤:
为向量创建一个新的空闲列表(想要重用的虚构对象类型):
// Some type of object I want to be able to reuse
var Vector = require('./Vector');
// The freelist itself
var FreeList = require('freelist').FreeList;
// Arguments are (freelistName, maxSize, constructorForNewObjects)
var vectorsList = new FreeList('vectors', 1000, function() {
// quick way to use constructor with arguments object
return Vector.apply(Object.create(Vector.prototype), arguments);
});
Run Code Online (Sandbox Code Playgroud)
从空闲列表中获取新的向量:
var vector = vectorsList.alloc(/* optional arguments for the Vector constructor /*);
Run Code Online (Sandbox Code Playgroud)
释放不再需要的向量:
vectorsList.free(vector);
Run Code Online (Sandbox Code Playgroud)
而已.
需要注意的一件非常重要的事情:虽然我已经写过将alloc调用中的参数传递给向量构造函数,但只有在列表中没有可用的向量时才会发生这种情况.否则,您只需获得第一个可用的向量,仍然使用构造时的任何参数构建.
如果你想要干净地初始化每个对象,你可能不应该把对象的初始化放到构造函数中,而应该放在一个init函数中,你总是在从freelist获取一个对象之后调用它.
当然,这可能是由freelist进行的,有一些聪明的黑客攻击,再次调用构造函数进行初始化.
| 归档时间: |
|
| 查看次数: |
665 次 |
| 最近记录: |