我创建了一个对象 this.bookView = new BookView();
当我执行 this.bookView=null
时,垃圾收集器没有删除该对象。
Google Dev Tool 配置文件快照保留器窗口显示以下连接(这表明某些内容引用了该对象)。
除了() 中的上下文
之外,所有行都是“预览不可用”
。
问题是 BookView
有 addSheet
函数变量,该变量尚未在任何地方使用,但通过 _this
保存对自身的引用.
我尝试过的:
1) this.bookView.addSheet = null;
(没有帮助)
2) 删除 this.bookView.addSheet;
(没有帮助)
我的问题:
1) 如何从Window中删除此连接并使bookView
被垃圾收集?
2) 为什么addSheet
变量是从Window对象链接的?
3) retainers
窗口上的转换
和描述符
是什么?
4)我还可以使用哪些其他工具来查找有关此类内存泄漏的更多详细信息。
附注bookView
对象是在 Durandal 页面内创建的。 this.bookView
基本上是一个 page1.bookView
。页面已正确删除。在 deactivate
(页面删除)功能期间,我调用 this.bookView = null;
最佳答案
如果您没有在 function
中实例化 BookView
,this
将是您的 window
对象,这是全局性的。您已将其全局附加到一个对象,该对象将一直存在,直到您关闭浏览器或选项卡为止。您可以尝试通过删除 window['bookView']
BookView
编辑:在 Durandal 页面中停用回调,运行 this
并删除其键。
for(var key in this)
delete this[key];
关于JavaScript 内存泄漏。由于函数变量,对象未被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41968885/