
[英]Solving Memory Issues: What is a FiberNode in Chrome Dev Tools?
[英]What does it mean for `(compiled code)` to build up on the js heap in chrome dev tools? Is this a memory leak?
我一直试图在我的 ReactJS web 应用程序中追踪一个小的 memory 泄漏。 它在 10 分钟左右的时间内增加了 10-30 mb。
我使用 chrome 开发工具拍了 3 张堆快照:1 张是在页面加载后稳定的 state,1 张是在我执行我怀疑泄漏的操作之后,第 3 张是在第二次执行该操作之后。 现在我正在查看快照之间正在构建的内容。
我看到了几件事,并且正在努力修复它们,但是在我的快照之间堆积在堆上的第一大罪魁祸首是(compiled code)
。 我正在努力理解这代表什么,以及它是否是泄漏。
在页面完全加载并处于稳定的 state 后,什么会导致代码加载到 memory? 这是否表明泄漏?
(这里是 V8 开发人员。)
在页面完全加载并处于稳定的 state 后,什么会导致代码加载到 memory?
V8 动态编译您的 JavaScript 代码。 目前,它的执行管道是这样的:
(这跳过了很多细节,但这就是它的要点。此外,我们一直在研究 V8,所以如果你找到五年前的文章,它们会描述类似但不同的情况;并且该团队目前正在再次尝试稍微改变一下,所以这个描述可能会在适当的时候变得有些过时。这里有一些进一步的阅读。)
在页面加载期间很少有函数被编译为机器代码,这是完全正常的/预期的,特别是因为在那里运行的许多代码只运行一次来设置东西。
一旦您开始使用页面的功能并且您的一些 JS 函数重复运行和/或运行更长时间,它们将被编译为机器代码,因此您将在堆快照中看到更多(compiled code)
。
这是否表明泄漏?
不,它只是表明多层 JIT 编译系统正在执行它的工作。
(如果您观察到代码量永远增长,例如,每次您重复某个操作时,您都会获得 X 量的额外编译代码,并且这种增长永远不会停止,那么这听起来像是泄漏。但这不是您所描述的。 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.