【问题标题】:Finding Extension Javascript Leaks查找扩展 Javascript 泄漏
【发布时间】: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


【解决方案1】:

Firefox Memory Leak addon 应该告诉你它在哪里泄漏内存,不需要调试构建。

我没有在 Firefox 插件中使用 C++,但您可以使用 valgrind 或其他内存泄漏检测器检查您的代码。 Javascript 也会导致内存问题,例如在 Firefox 窗口中使用 registerListener 而不添加 window.addEventListener("unload", function() {unregisterListener}) 会导致内存泄漏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-26
    • 2018-05-30
    • 2019-07-16
    • 2013-11-06
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    相关资源
    最近更新 更多