gpt4 book ai didi

javascript - 这是 JavaScript 内存泄漏吗?

转载 作者:行者123 更新时间:2023-11-28 13:26:17 25 4
gpt4 key购买 nike

enter image description here我已经在 Chrome 开发者工具中分析了我的 Web 应用程序,并得出了上面显示的时间线。我正在通过悬停功能创建和删除元素。我在 this article 中读到过这一点.

此模式是否表明我存在内存泄漏?节点计数(绿线)持续上升,在内部 GC 上并未下降。但在我的强制 GC 上下降到零。这是常见行为吗?

我的意思是,它在内存中保存了很多节点,即使它们不存在。如果我检查,不存在对 DOM 节点的引用(没有分离的 DOM 等),这让我认为这不是内存泄漏?

你的五美分是多少?

代码如下:

$(document).on("mouseenter", ".btn", function(e){
var el = document.createElement("div");
el.id = "box";
document.body.appendChild(el);
});
$(document).on("mouseleave", ".btn", function(e){
$("#box").remove();
});

最佳答案

我在 Chrome 显示的跟踪中没有看到内存泄漏。您缺少的信息是,当垃圾收集周期启动时,该周期可能部分收集垃圾。让我解释一下。

我不熟悉 v8 中的垃圾收集器,但在过去的不同时期我都在研究垃圾收集器。垃圾收集是快速释放未使用的内存和应用程序响应能力之间的平衡行为。特别是在交互式应用程序中,您不希望长时间暂停执行以允许完整的垃圾收集周期,因为这会影响用户的体验。因此,存在一些策略,垃圾收集周期可以是部分而不是完整。看来v8就采用了这样的策略,因为Google's blurb on v8's garbage collection状态:

This means that V8:

  • stops program execution when performing a garbage collection cycle.
  • processes only part of the object heap in most garbage collection cycles. This minimizes the impact of stopping the application.

因此,您不应期望大多数周期会将节点计数降至零。

为什么强制 GC 会将计数降至零?通过从 Google 关于调试内存泄漏的文档推断,我推断强制 GC 周期不仅强制 GC 周期开始,而且强制周期完整而不是部分,否则强制周期将是对于想知道是否存在内存泄漏的人来说毫无用处。

关于javascript - 这是 JavaScript 内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28842191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com