了解Chrome开发人员工具中的“本机内存分析”

时间:2013-02-11 07:51:04

标签: google-chrome google-chrome-devtools

我正在构建一个带有简单搜索面板的应用程序,该搜索面板具有很少的搜索属性和结果面板。在结果面板中,我使用Slickgrid以表格形式呈现数据。

经过几次搜索(AJAX调用服务器)后,页面被加载了很多,并且最终会在一段时间后崩溃。我已检查DOM计数和JavaScript堆使用情况以查找可能的内存泄漏。我找不到任何错误。但是,当我运行实验性本机内存分析器时,我看到“JavaScript外部资源”部分使用600+ MB内存。在运行垃圾收集器时,它会降低到几MB。我在这里有几个问题:

  1. “JavaScript外部资源”部分的贡献是什么?我认为它对应于从服务器传输的JSON数据/ JavaScript源。仅供参考,来自服务器的gzip压缩响应约为1MB。
  2. 为什么Chrome不会主动释放内存而不是崩溃页面?同样,当我手动运行垃圾收集器时,它释放“JavaScript外部资源”使用的内存。
  3. 如何解决原始问题?

1 个答案:

答案 0 :(得分:1)

JS Heap Profiler在javascript中创建对象的快照,但javascript代码可以在“Int8Array”,“Uint8Array”,“Uint8ClampedArray”,“Int16Array”,“Uint16Array”,“Int32Array”,“Int32Array”的帮助下使用本机内存。 Uint32Array“,”Float32Array“和”Float64Array“。 因此,当您拍摄快照时,它将只有指向本机内存块的小包装器。 遗憾的是,堆快照不提供有关用于这些类型对象的本机内存的数据。 本机堆快照能够计算该内存,现在我们知道该页面通过数组或外部字符串使用本机内存。

我想知道你是如何检查页面没有内存泄漏的?您是使用三种快照技术还是仅检查特定对象? Tool to track down JavaScript memory leak