为什么此javascript在Chrome中发生内存泄漏?

时间:2018-12-24 16:53:42

标签: 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的顶部。如果有人知道,请添加您的想法。

1 个答案:

答案 0 :(得分:2)

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