我正在尝试诊断SPA。当应用程序空闲时,我拍摄了两张快照,一张接一张。这是下面的快照。如您所见,这些物体的浅尺寸非常大。但我不知道它们是什么,或者它们来自何处。 (编译的代码)对我没有意义,deoptimization_data或relocation_info也没有意义。
有没有人知道如何使用这些信息来实际追踪相当大的应用程序中的泄漏?
答案 0 :(得分:5)
请使用此处描述的技巧:Tool to track down JavaScript memory leak
Chrome中的Javacript引擎(称为v8)可以快速执行脚本。 实际上它会动态编译所有的js代码(JIT)。如果删除所有调用和对它的引用,则编译的代码可能变得不必要。即你可能在DOM树中有一个带有事件监听器的元素,在某些时候你可以从DOM树中删除这个元素。因此,事件侦听器的代码将变得不必要,v8应该能够删除该代码。因此,v8将编译后的代码保存在与对象,数组,字符串等相同的托管堆中。
当您查看堆快照时,您会看到堆中的所有内容,包括与代码相关的所有内容,例如代码重定位信息,去优化数据,带有行尾的数组,脚本文本等。