我有一个计时器函数,该函数创建大量数据,并用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的顶部。如果有人知道,请添加您的想法。
答案 0 :(得分:2)
您遇到了Chrome的安全问题。 Chrome不会通过“ window.performance.memory”公开真实的内存使用情况。攻击者可以利用这些信息来攻击Web浏览器。