我正在使用Chrome开发工具分析javascript应用程序。
我看到增长的唯一内存区域是System objects total。
我想知道我怎么能理解导致这种行为的原因,因为工具中没有详细信息显示哪些系统对象泄露了。
我已经看过应用分配,但随着时间的推移,它并没有太大变化...... 当我使用时间轴功能堆增长超过500mb
时答案 0 :(得分:7)
根据Chromium中的JSHeapSnapshot.js实现,如wOxxOm的评论中所述,执行给定节点距离100000000的比较(distances[ordinal] >= WebInspector.HeapSnapshotCommon.baseSystemDistance
,其中WebInspector.HeapSnapshotCommon.baseSystemDistance = 100000000
)和如果通过,则将大小累积到饼图的系统段中。
最后修改此值的commit提及
目前,如果系统空间对象都保留了用户对象 (例如,调试器)和另一个用户对象,系统对象可能是 先前在保留器树中显示。如果它的距离是这样的话 小于其他保留用户对象的距离。
补丁处理从系统空间对象到用户对象的链接 优先级较低,因此这些链接显示在保留器的底部 树。
这表明javascript堆上的系统空间对象被调试器和其他内部组件用于浏览器(V8,WebKit等)。它们不受脚本分配堆对象的直接控制。
wOxxOm还提到过这个名字曾经是V8堆。也就是说,V8分配的对象超出了执行脚本的范围。运行性能分析和拍摄快照的可能性很可能也会在该对象的堆对象中执行分配,从而导致您看到构建系统分配的模式。