chrome javascript内存分析器中的System对象是什么

Ser*_*ets 27 javascript memory profiling google-chrome-devtools

我正在使用Chrome开发工具分析javascript应用程序.

我看到增长的唯一内存区域是System对象总数.

我想知道我怎么能理解导致这种行为的原因,因为工具中没有细节显示哪些系统对象泄露了.

我看了一下应用程序分配,但随着时间的推移它没有太大变化...当我使用时间轴功能堆增长超过500mb

初始快照

多小时使用后的快照

使用时间线工具后的快照

Tyl*_*Y86 7

根据Chromium中的JSHeapSnapshot.js实现,如wOxxOm的评论中所述,执行给定节点距离100000000的比较(distances[ordinal] >= WebInspector.HeapSnapshotCommon.baseSystemDistance,其中WebInspector.HeapSnapshotCommon.baseSystemDistance = 100000000),如果通过,则将大小累积到饼图的系统段中.

最后修改此值的提交,

目前,如果系统空间对象(例如调试器)和另一个用户对象都保留了用户对象,则系统对象可能会在先前的保留器树中显示.如果其距离小于其他保留用户对象的距离,则会发生这种情况.

补丁处理从系统空间对象到优先级较低的用户对象的链接,因此这些链接显示在保留器树的底部.

这表明javascript堆上的系统空间对象被调试器和其他内部组件用于浏览器(V8,WebKit等).它们不受脚本分配堆对象的直接控制.

wOxxOm还提到过这个名字曾经是V8堆.也就是说,V8分配的对象超出了执行脚本的范围.

运行性能分析和拍摄快照的可能性很可能也会在该对象的堆对象中执行分配,从而导致您看到随着时间的推移构建系统分配的模式.