如何正确读取Firefox“about:memory”?

问题描述:

在Firefox(我猜Firefox 4以后),我们有about:memory页面。即使我对C/C++动态内存管理非常熟悉,我也不得不承认我不知道如何阅读该页面。如何正确读取Firefox“about:memory”?

我希望about:memory能够让我作为JavaScript /前端开发人员,在ECMAScript和/或DOM脚本中创建一个检测/查找内存泄漏的更好方法。我正在测试Windows 7和Mac OS X Snow Leopard系统。

所以我有几个问题,希望有人可以回答这些(请不要猜测,如果你不确定)。

  • Windows 7区别win32/privatebytesMemory in use

这真让我很烦恼。如果我正在做一些重ECMAScript/DOM操作,前者的价值似乎增加到了最后,相比之下Memory in use保持“小”。 这里哪个值真的很有趣?它看起来像win32 privatebytes是你可以在你的任务管理器中看到的相同的值。

  • Memory mappedMemory in use有什么区别?

我在这一个上搜索了很长一段时间。有人说它表示有多少内存在使用中是分散的。这是什么意思详细?这是内存泄漏的直接指标吗?

如果有人能够解释大部分值(或者链接我找不到的资源),我会很高兴。但是,对我来说最有趣的是这些win32私人字节和浏览器内存使用率之间的巨大差距。 Max OS X似乎没有这些值的等价物,我想这是因为一个基本不同的内存管理系统。

+1

你应该更新你的Firefox。 Firefox 6中提到的类别不再存在,该列表更容易理解。 –

+0

@Wladimir:的确如此。 FF6使它更加清晰。 – jAndy

你应该只关心实际使用的内存由浏览器。由于内存碎片等原因,在操作系统级别总是会分配更多的内存。但这确实是浏览器开发人员需要考虑的问题。如果您看到可复制的病态行为 - 提交Mozilla错误(需要最小化测试用例)。但除此之外,您只应确保代码不会囤积无法释放的对象(可以使用内存来看)。

我不确定是否在新版本的about:memory中甚至可以使用新名称显示“内存映射”。我很确定你不应该关心它。这是分配给它的地址的内存量,这在操作系统级别上只是有趣的。

该Mozilla博客似乎可以解释它相当不错,如果没有,那么你已经有了一个人的联系方式,谁知道:

http://blog.mozilla.com/nnethercote/2011/05/23/a-better-aboutmemory-stage-1-75/

+0

很好的资源谢谢。但我对这里显示的视图感到困惑,至少与FF5看起来很不一样。这些“隐式”和“显式”的alloc很好,但在我看来并不明显。 – jAndy

+0

啊,是的,这是一个耻辱 - 特别是FF4的观点,我刚刚更新我的本地安装到FF5,它看起来也不同。点击“详细”链接是否有帮助? –

+0

这就是说,博客海报已经表明,这个新视图是前两棵树的组合,尽管他继续看到你可能会错过一些操作系统级别的分配,尽管表示了整个堆;他还将增加一些内存记者的“重要的操作系统级别分配”,这可能对你来说有些用处。 –

回答在线程的标题一般的问题,而不是具体的问题,这些问题似乎得到解决:

  • 哈弗你感兴趣的测量,他们有一些解释提示。
  • 如果您对细节感兴趣,有时可以阅读该措施背后的讨论(在bugzilla中)。
    要查找讨论,请在mozilla代码中搜索度量名称,例如http://mxr.mozilla.org/mozilla-central/search?string=heap-dirty,选择'Hg Blame'链接,点击度量名称的行之前的链接(它看起来像<user>@<revid>),然后单击更改集链接(如changeset NNNNNN a6b3a22fbca7),然后单击错误链接。