【发布时间】:2011-05-06 09:08:32
【问题描述】:
我用 C++ XPCOM 对象编写了一个主要是 JS 的扩展。 它相当复杂且冗长,我相信我有很多内存泄漏(使用显示泄漏的工具)
我迷路了.. :(
我只是找不到一个简单、严格的工具来告诉我我的泄漏是从哪里产生的。
我做了以下事情: 阅读 - https://wiki.mozilla.org/Performance:Leak_Tools 阅读有关内存泄漏的各种其他文章。 使用 - 泄漏监控插件和泄漏 guague(都显示泄漏)。
如何追踪导致我的 js 代码泄漏的原因?有什么工具可以轻松做到这一点吗? 有没有一篇文章解释了如何非常严格地做到这一点? 我需要运行 FireFox Debug 构建吗?我需要重新构建firefox吗?
请指导我,因为我完全迷路了:(
谢谢! D.
【问题讨论】:
-
寻找可能被添加到某些东西中然后永远不会被删除的事件侦听器,或者类似的东西。另一件需要注意的事情是闭包。创建闭包时,内部函数会保留外部函数中的所有变量。看起来这里有一些很好的讨论:stackoverflow.com/questions/5245324/closure-memory-leaks
-
一个完全用 JS 编写的扩展不应该因为各种垃圾和循环收集器而泄漏,所以它可能是 C++ 对象让事情变得棘手,特别是如果它有对象成员,因为这很容易导致循环,会泄漏。
标签: javascript firefox memory-leaks firefox-addon