https://github.com/joyent/node/blob/master/lib/freelist.js
制作销毁方法是非常危险的。我建议如果您对此感到担忧,那么您可以使用 require('freelist') 并在使用后尝试回收内存 - 这就是我在 net.js 中所做的
例如在https://github.com/joyent/node/blob/master/lib/http.js中使用它,但我仍然没有完全理解它。一个如何使用这个模块的例子是很好的。
https://github.com/joyent/node/blob/master/lib/freelist.js
制作销毁方法是非常危险的。我建议如果您对此感到担忧,那么您可以使用 require('freelist') 并在使用后尝试回收内存 - 这就是我在 net.js 中所做的
例如在https://github.com/joyent/node/blob/master/lib/http.js中使用它,但我仍然没有完全理解它。一个如何使用这个模块的例子是很好的。
这是管理经常创建和销毁对象的重用的非常简单的方法。freelist 仅在没有当前未使用的对象可用时创建新对象,减少内存占用而无需等待垃圾回收等。使用它涉及三个简单的步骤:
为向量创建一个新的空闲列表(您想要重用的虚构对象类型):
// 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);
});
从 freelist 中获取一个新向量:
var vector = vectorsList.alloc(/* optional arguments for the Vector constructor /*);
释放不再需要的向量:
vectorsList.free(vector);
就是这样。
需要注意的一件非常重要的事情:尽管我已经在上面编写了将来自 alloc 调用的参数传递给向量构造函数的内容,但这仅在列表中没有可用向量的情况下才会发生。否则你只会得到第一个可用的向量,仍然用它在构造时的任何参数构造。
如果您想真正干净地初始化每个对象,您可能不应该将对象的初始化放入构造函数中,而是放入 init 函数中,在从 freelist 中获取对象后始终调用该函数。
当然,这可能通过 freelist 来完成,并通过一些巧妙的技巧再次调用构造函数进行初始化。