助けてくれてありがとう。循環参照がある場合、Node.js console.log(util.inspect(ctx)) は [Circular] をダンプします。
これがスタックオーバーフローまたはメモリの問題を引き起こす場合、循環参照は完全に避けるべきものですか?
循環参照を含むループがあり、ループを終了する前にオブジェクトを 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()));
}