我有一个计时器函数,它创建大量数据,用 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/