Javascript GC 应用现有对象
Javascript GC apply existing object
假设我们有一个对象池(又名数组)。然后我们 Constructor.apply(obj, arguments)。
var obj = objectPool[nextAvailableIndex];
obj.index = nextAvailableIndex;
nextAvailableIndex += 1;
Constructor.apply(obj, arguments);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
这对现有 Obj 有何影响?内存是否被重用?这有助于避免 GC 吗?是不是本质上和new一样,还是类似但又不同?
假设我们考虑这样的代码片段:
</p>
<pre><code>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' 的新局部变量,但在执行调用者之后,该变量将被释放。
就是这样。
What does this do to the existing Obj?
它在其上调用 Constructor
,其 this
值设置为 obj
。 Constructor
到底做了什么我们不知道,但一般来说它应该初始化一个新实例。
Is the memory reused?
部分取决于 Constructor
的作用,以及它如何处理非新鲜实例。但是,是的,obj
从未被释放,因为它停留在 objectPool
数组中,并且与 new Constructor(…)
相比,没有从 Constructor.prototype
继承的新对象被实例化。
假设我们有一个对象池(又名数组)。然后我们 Constructor.apply(obj, arguments)。
var obj = objectPool[nextAvailableIndex];
obj.index = nextAvailableIndex;
nextAvailableIndex += 1;
Constructor.apply(obj, arguments);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
这对现有 Obj 有何影响?内存是否被重用?这有助于避免 GC 吗?是不是本质上和new一样,还是类似但又不同?
假设我们考虑这样的代码片段:
</p>
<pre><code>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' 的新局部变量,但在执行调用者之后,该变量将被释放。
就是这样。
What does this do to the existing Obj?
它在其上调用 Constructor
,其 this
值设置为 obj
。 Constructor
到底做了什么我们不知道,但一般来说它应该初始化一个新实例。
Is the memory reused?
部分取决于 Constructor
的作用,以及它如何处理非新鲜实例。但是,是的,obj
从未被释放,因为它停留在 objectPool
数组中,并且与 new Constructor(…)
相比,没有从 Constructor.prototype
继承的新对象被实例化。