JavaScript的Chrome浏览器类型数组的垃圾收集(Javascript garbage c

2019-09-22 06:01发布

请考虑以下的JavaScript。 我本来以为在循环分配将允许garbaging集合中防止溢出堆踢。 它正确地这样做在Firefox,但在Chrome(在OSX测试)的片段经过多次反复崩溃打开的选项卡。

    for (var i = 0; i < 1024; ++i) {
            // Allocate a 16mb buffer
            var buffer = new Float32Array(1024*1024*4);

            // Try to explicitly mark it for free by either
            delete buffer;
            // or
            buffer = null;

            console.log(i);
    }

这本身脚本它不那么有用。 但我想,以优化为了我的JavaScript应用程序为它使用较少的内存。 因此,我想你的意见。 这是浏览器的错误? 你知道的任何变通办法的显式调用代码执行过程中的垃圾收集(在FF和IE浏览器,他们似乎存在)? 谢谢!


编辑:似乎有存在于Chrome检查一个按钮,所谓的“垃圾收集”。 这是督察的“时间轴”面板上的下杆7日按钮。 这难道不意味着一个方式存在从JavaScript调用GC? 毕竟,没有督察的部分地区Javascript编写的?

Answer 1:

这是纯粹的猜测,但我不知道垃圾收集是否被推迟到在运行循环的当前项目执行完毕。

如果是这样,那么也许它会如果形状像这样的工作:

var i = 0;
function allocateArray() {
    var buffer = new Float32Array(1024*1024*4);
    if (++i < 1024) {
        setTimeout(allocateArray, 0); // Post the next call to the run loop
    }
}
allocateArray();


Answer 2:

据我所知,调用GC不起作用。 你可以明确地调用它如Chrome浏览器,但你必须激活一些调试选项,所以这不是对完成的程序的选项。

下面是关于没有被正确的垃圾收集类型数组铬错误。 https://code.google.com/p/chromium/issues/detail?id=232415

我个人有一个计划,现在,在那里输入阵列导致其他浏览器在Chrome巨大的性能损失和轻微的性能损失。

我想创造新的类型化阵列经常应尽量避免。(在当前时间)

如果有人知道比我更多关于这个话题,我真的很感激它。



文章来源: Javascript garbage collection of typed arrays in Chrome