如果我有一个本来应该被垃圾回收的对象,但是已经被记录到控制台了,那么它还会被垃圾回收吗?
(function(){
var o = { foo: {} };
console.log(o);
}())
// Can o be collected?
如果是这样,是否存在任何情况下写入控制台(使用其任一方法)会影响垃圾回收的资格?
编辑:我不认为这会影响可在 Chrome 开发工具中监视堆的垃圾回收资格。但是,任何写入控制台的类别是否会影响垃圾回收资格呢?
如果我有一个本来应该被垃圾回收的对象,但是已经被记录到控制台了,那么它还会被垃圾回收吗?
(function(){
var o = { foo: {} };
console.log(o);
}())
// Can o be collected?
如果是这样,是否存在任何情况下写入控制台(使用其任一方法)会影响垃圾回收的资格?
编辑:我不认为这会影响可在 Chrome 开发工具中监视堆的垃圾回收资格。但是,任何写入控制台的类别是否会影响垃圾回收资格呢?
如果您将对象记录到控制台中,它将无法进行垃圾回收。
您可以通过在Chrome控制台中输入以下内容来验证此操作:
var Foo = function() {};
console.log(new Foo());
前往“Profiles”并选择“Take Heap Snapshot”。这将自动进行垃圾回收。搜索类“Foo”。在“Objects count”列中将显示1
。
版本79.0.3945.117(官方构建)(64位)
,这个语句似乎不再正确。我拍了一个堆快照,发现一些对象还在内存中,我手动进行了“收集垃圾”,然后再次拍摄堆快照,它们消失了。 - Morvael