小编Cle*_*Sum的帖子

'bound_this'引用的实例不是垃圾回收

我有一个关于谷歌浏览器垃圾收集的问题(版本20.0.1132.47,Ubuntu 11.04 64位).

在比较堆转储和检查内存泄漏时,我发现了一些从未清理过的实例.通常这种行为可以追溯到程序员错误,但在这种情况下,我很无能为力..

看一下下面的截图 堆转储的屏幕截图,显示仅由'bound_this'引用的实例(子)

实例'child @ 610739'仅由属于子实例本身的函数的'bound_this'实例引用.所以根据我的理解,子实例应该是垃圾收集的,因为保持它的唯一其他引用是子实例本身(通过'bound_this'函数).

我正在使用underscore.js''bindAll'实用程序函数(underscore.js#bindAll)映射到chrome的'native_bind'函数(bound_this上的ECMA Script wiki)

我是否遗漏了一些明显的东西,如果是这样,有人可以解释是什么让这些实例保持活力?

更新:
同时我测试了相同的应用程序在chrominium(18.0.1025.168(开发人员构建134367 Linux)Ubuntu 11.10),它没有显示这些悬空实例..

更新2:
在Esailijas提示提供一个jsfiddle片段后,我创建了一个(http://jsfiddle.net/8gSTR/1/),模仿我基本上在做什么.不幸的是,运行这个小提琴并没有表明我在申请中遇到的不当行为.尽管引用了window.o数组来保持实例存活,但仍然引用"a"实例时所采用的堆转储看起来有点类似. 在执行上面提到的jsfiddle期间执行的堆转储

因为在我的情况下缺少这样的引用(屏幕截图1)我不知道是什么阻止了chrome释放这些实例...

更新3:
遵循loislos建议以启用隐藏属性.结果(扩展其中一个分支)可以在下面的屏幕截图中看到,但它不会让我更进一步. 启用了隐藏属性的堆转储

javascript memory memory-leaks google-chrome google-chrome-devtools

33
推荐指数
1
解决办法
1765
查看次数