Javascript GC应用现有对象

Javascript GC应用现有对象,javascript,garbage-collection,object-pooling,Javascript,Garbage Collection,Object Pooling,假设我们有一个对象池(也称为数组)。然后我们使用构造函数.apply(obj,参数) 这对现有的Obj有什么影响?内存是否被重用?这有助于避免GC吗?它不是本质上与新的相同还是相似但不同? < p>假设我们考虑这样的代码片段: function Constructor() { this.prop = "some_value"; } var objectPool = [{}, {}, {}]; var nextAvailableIndex = 0; function Caller() {

假设我们有一个对象池(也称为数组)。然后我们使用构造函数.apply(obj,参数)


这对现有的Obj有什么影响?内存是否被重用?这有助于避免GC吗?它不是本质上与新的相同还是相似但不同?

< p>假设我们考虑这样的代码片段:

function Constructor() {
    this.prop = "some_value";
}
var objectPool = [{}, {}, {}];
var nextAvailableIndex = 0;
function Caller() {
    var obj = objectPool[nextAvailableIndex];
    obj.index = nextAvailableIndex;
    nextAvailableIndex += 1;
    Constructor.apply(obj, arguments)
}

在这种情况下,调用调用方时,每次都会创建一个名为“obj”的新局部变量,但在执行调用方后,该变量被释放

就这样

这对现有的Obj有什么影响

它调用其上的
构造函数
,其
this
值设置为
obj
。我们不知道
Constructor
到底做了什么,但通常它应该初始化一个新实例

内存是否被重用


部分取决于
构造函数的作用,以及它如何处理非新实例。但是,是的,
obj
从未被发布,因为它停留在
objectPool
数组中,与
新构造函数(…)
相比,没有从
构造函数继承的新对象。原型
被实例化。

我应该在这里放更多的代码。这是一个对象池。假设不再需要池[100],我们希望重用它。所以var obj=pool[100];。。。;构造函数.apply(obj,参数);然后我们将obj放回池中[100]。需要回答的问题是:1)新vs应用,我们是要重用内存还是仍在创建与新相同的东西。如果是这样,那么对象池是一个无用的想法,因为它不会在应用期间阻止GC。我不知道你是否回答了我的问题。我的问题可能不好,但它似乎重新解释了这个问题。如果您使用
apply
,那么每次都使用相同的对象,但每当您使用
new
时,就会创建一个新对象。在这种情况下,如果您将obj放回池中,那么您正在重用内存,但是如果您没有池的引用,那么池将被垃圾收集。谢谢。我也这么想,但在我发帖的前一天,我的一个朋友让我确信我错了。我想我对自己的信仰失去了信心。
function Constructor() {
    this.prop = "some_value";
}
var objectPool = [{}, {}, {}];
var nextAvailableIndex = 0;
function Caller() {
    var obj = objectPool[nextAvailableIndex];
    obj.index = nextAvailableIndex;
    nextAvailableIndex += 1;
    Constructor.apply(obj, arguments)
}