Nodejs中的循环引用

时间:2013-09-06 00:42:10

标签: node.js reference virtual-machine

提前感谢您的帮助。 当有循环引用时,Node.js console.log(util.inspect(ctx))将转出[Circular] e.g。

循环引用是否应该完全避免,如果这会导致堆栈溢出或内存问题?

如果我们有一个包含循环引用的循环,但我们在退出之前将对象设置为null 循环,不应该垃圾收集器清理存储,我们不应该有任何 内存不足或堆栈溢出问题后呢?

    function run() {
    var obj = {}, ctx = vm.createContext({});

    obj.__ctx = ctx;
    ctx.__obj = obj;
    //console.log("before:"+util.inspect(obj));
    //console.log("before:"+util.inspect(ctx));
    vm.Script.runInContext('var x = +1;', ctx);
    console.log(util.inspect(ctx));
    console.log(util.inspect(obj));
    ctx = null;
    obj = null;


     }

     for (var i = 0; i < 10000; i += 1) {

     run();
     //sys.log(sys.inspect(process.memoryUsage()));

     }

1 个答案:

答案 0 :(得分:0)

除非您持有对函数范围之外的对象的引用,否则这不会导致内存问题。它的编写方式,只要它们被设置为null,它们就有资格进行垃圾收集。

console.log()方法只会产生循环错误,因为尝试将对象图写出来会导致无限循环,所以只需回复[Circular]