使用以下代码,每当启用 console.log 时,o.big 引用的字符串将不会被垃圾收集。一旦我删除日志语句,大字符串的内存就会在处理程序函数执行完成后被释放。
我使用的是 Firefox 9.0.1,内存分析是通过 about:memory 完成的。
$(function() {
var handler = function() {
var o = {};
o.big = (new Array(20*1024*1024)).join("x");
console.log(o.big);
delete o.big;
};
$("#btn").click(handler);
});
我是 JavaScript 的新手,如果有人能向我指出为什么在 console.log 中使用 String 不会被 gc 标记,那就太好了。
最佳答案
虽然我不太熟悉 Firefox/Firebug 对 console.log()
的处理,但我假设显示“已记录”对象的控制台提供了一种检查它并与之交互的方法。至少 Chrome 是这样。
因此,控制台需要对对象的引用,该对象将保留在内存中,并且在控制台释放引用之前不能被垃圾回收(这可能要等到托管脚本的页面重新加载后才会发生)。
最后,请记住 delete
operator 之间没有明确的关系和垃圾收集。
关于javascript - Firefox console.log 阻止 JavaScript String 被垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8728739/