堆快照大小远小于使用的RAM量

时间:2017-04-05 13:21:33

标签: javascript google-chrome profiling google-chrome-devtools heap-profiling

我正在通过其任务管理器检查Chrome中特定标签的内存消耗情况。它向我展示了相当大量的RAM:

enter image description here

然而,当我在开发人员工具中获取堆快照时,其显示的大小要少几倍:

enter image description here

怎么会这样?

1 个答案:

答案 0 :(得分:1)

并非浏览器分配的每一位内存都由堆上分配的ECMAScript对象使用。在堆栈上还分配了ECMAScript对象,ECMAScript运行时本身,下载的资源(HTML,CSS,ECMAScript,SVG,PNG,GIF,JPEG,...),DOM对象,显示树,显示缓冲区,缓存,浏览器本身等。

此外,转储堆只会转储活动对象,而不是垃圾,并压缩堆,所以即使是" live"堆单独将比堆转储大,因为实时堆还包含尚未被垃圾收集的死对象,以及" hole"自由记忆。

tl; dr :堆转储只包含紧密排列在一起的活动对象。 真正的堆还包含死对象和漏洞,此外还有很多东西,而不是ECMAScript堆。