javascript - 为什么这个 javascript 在 Chrome 中有内存泄漏?

标签 javascript google-chrome memory memory-leaks

我有一个计时器函数,它创建大量数据,用 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-> 更多工具-> 任务管理器和 Windows 任务管理器中增长,只有一个 Chrome 实例与我的 test.html 文件一起运行。 我能找到的唯一提到这是 Chrome 中可能存在错误的链接是:

Javascript garbage collection of typed arrays in Chrome

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

虽然这些都是旧帖子,但我不敢相信这个错误会存在这么久。

所以 - 我仍然感到困惑。

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

最佳答案

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

关于javascript - 为什么这个 javascript 在 Chrome 中有内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53915918/

相关文章:

javascript - 在 Math.max(...arr) 中,我应该使用什么代替 Chrome 的扩展运算符?

html - CSS 适用于 Chrome 但不适用于 IE

memory - Tensorflow:如何减少仅推理模型的内存占用?

c++ - void* 指针问题

python - 了解经过训练的神经网络内存使用情况

javascript - 如何使用 Javascript 禁用 Chrome 浏览器中的开发者工具

javascript - 如何从 JavaScript 读取 png 元数据?

javascript - 捕获生产中JavaScript错误的最佳方法?

css - 如何修复谷歌浏览器中奇怪的字体渲染(一些较高的字符)?

javascript - 将上下文变量作为参数传递给 onclick 事件处理程序