0

我正在通过其任务管理器检查 Chrome 中特定选项卡的内存消耗。它向我展示了相当大量的 RAM 使用:

在此处输入图像描述

然而,当我在开发人员工具中拍摄堆快照时,它显示的大小要小几倍:

在此处输入图像描述

这个怎么可能?

4

1 回答 1

1

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

此外,转储堆只会转储活动对象,而不转储垃圾,并压缩堆,因此即使“活动”堆本身也会比堆转储大,因为活动堆还包含尚未成为垃圾的死对象 -尚未收集,以及空闲内存的“漏洞”。

tl;dr:堆转储仅包含紧密打包在一起的活动对象。真正的堆还包含死对象和空洞,此外,除了 ECMAScript 堆之外,还有很多东西。

于 2017-04-05T13:38:55.987 回答