【问题标题】:Why does this javascript have a memory leak in Chrome?为什么这个 javascript 在 Chrome 中有内存泄漏?
【发布时间】:2019-05-23 18:19:50
【问题描述】:

我有一个创建大量数据的定时器函数,用 var 声明。为什么对象没有被垃圾收集? usedJSHeapSize 显示的数字不断增长。 Chrome 中的任务管理器也显示内存增加。

我正在使用 VS 2017 在 Windows 10、Chrome 中对此进行测试。

如果我将代码复制并粘贴到名为 test.html 的单独文件中并在 Chrome 中打开它,它也会显示泄漏。

我在 Edge 和 IE 中测试了这段代码(使用开发者工具而不是 usedJSHeapSize),我没有发现内存泄漏。

这是 Chrome 的问题吗?

    <script type="text/javascript">
        function refreshTimer() {
            try {
                var longStr = new Array(1000000).join('*');
                document.getElementById('div1').textContent = 'usedJSHeapSize: ' + window.performance.memory.usedJSHeapSize;
            }
            catch (err) {
                document.getElementById('div1').textContent = 'refreshTimer: ' + err;
            }
        }
        window.setInterval("refreshTimer()", 3*1000);
    </script>
    <div id="div1" style="font-family:Calibri"></div>

我希望不会有内存泄漏,因为大数据对象是用 var 声明的,并且应该在离开作用域时进行垃圾回收。

编辑我原来的帖子:

我已经在使用和不使用“--enable-precise-memory-info”的情况下运行 Chrome,这没有区别。我观察到在 Chrome->More Tools->Task Manager 和 Windows 任务管理器中内存在增长,只有一个 Chrome 实例与我的 test.html 文件一起运行。 我能找到的唯一链接是这些链接:

Javascript garbage collection of typed arrays in Chrome

https://bugs.chromium.org/p/chromium/issues/detail?id=232415

虽然这些都是旧帖子,但我无法相信这个错误会存活这么久。

所以 - 我还是很困惑。

2019 年 1 月 2 日 - 添加评论以将此问题移至 SO 顶部。如果有人知道,请补充您的想法。

【问题讨论】:

    标签: javascript google-chrome memory memory-leaks


    【解决方案1】:

    您在使用 Chrome 时遇到了安全问题。 Chrome 不会通过“window.performance.memory”公开真实的内存使用情况。攻击者可以利用这些信息来攻击网络浏览器。

    【讨论】:

    • 在 Chrome -> 更多工具 -> 任务管理器中查看内存时也是这样吗?我看到这段代码的内存也在快速增长。
    • 我不希望这个数字非常准确,甚至接近实际,但为什么会不断增加呢?它真的看起来根本不是垃圾收集。
    猜你喜欢
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 2016-08-03
    相关资源
    最近更新 更多