【发布时间】: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