gpt4 book ai didi

Chrome 中类型化数组的 Javascript 垃圾回收

转载 作者:搜寻专家 更新时间:2023-11-01 04:33:07 25 4
gpt4 key购买 nike

请考虑以下 javascript。我原以为循环中的分配将允许垃圾收集启动以防止堆溢出。它在 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 应用程序以使其使用更少的内存。所以我想听听你的意见。这是 Chrome 中的错误吗?您是否知道在代码执行期间显式调用垃圾收集的任何解决方法(在 FF 和 IE 中它们似乎存在)?谢谢!


编辑:Chrome 检查器上似乎存在一个名为“收集垃圾”的按钮。它是检查器“时间轴”面板下方栏中的第 7 个按钮。这是否意味着存在一种从 Javascript 调用 GC 的方法?毕竟,Inspector 的某些部分不是用 Javascript 编写的吗?

最佳答案

这纯粹是猜测,但我想知道垃圾回收是否被推迟到运行循环中的当前项完成执行。

如果是这样,那么如果你把它塑造成这样也许会奏效:

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();

关于Chrome 中类型化数组的 Javascript 垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12318103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com