引用成员是否会阻止父对象上的GC?

时间:2016-02-13 09:42:37

标签: javascript garbage-collection

说我有类似的东西:

function getMember() {

    var myRoot = {
       a: {val: 1},
       b: {val: 2}
    };

    return myRoot.a;
}

var myMember = getMember();

javascript在超出范围后如何处理myRoot对象?即使存在对myRoot.b的实时引用,它(及其“剩余”成员myRoot.a)是否会被垃圾收集?

1 个答案:

答案 0 :(得分:0)

  

引用成员是否会阻止父对象上的GC?

没有

除非该成员有一个循环引用回到父对象,或者包含/是一个关闭它的函数,当然,但这不是这里的情况。

  

在超出范围后,V8如何处理myRoot对象?

它将被视为每个其他对象。 myRoot变量将超出范围,对象将不再被任何内容引用,因此它有资格进行垃圾回收。

它甚至可能已存储在堆栈中,这意味着当函数返回时会立即重新声明其内存。

  

即使对myRoot.a的实时引用存在,它(及其“剩余”成员myRoot.b)是否会被垃圾收集?

是。引用不是“myRoot.a”,而是堆上的对象{val: 1}。它没有附上名字。