use*_*435 5 javascript garbage-collection google-chrome
请考虑以下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);
}
Run Code Online (Sandbox Code Playgroud)
这个脚本本身并不是那么有用.但我正在尝试优化我的Javascript应用程序,以便它使用更少的内存.所以我想你的意见.这是Chrome中的错误吗?您是否知道在代码执行期间显式调用垃圾收集的任何变通方法(在FF和IE中它们似乎存在)?谢谢!
修改:Chrome Inspector上似乎存在一个名为"收集垃圾"的按钮.它是Inspector"时间轴"面板下方栏上的第7个按钮.这不是表示存在从Javascript调用GC的方法吗?毕竟,不是用Javascript编写的Inspector的一部分吗?
这纯粹是猜测,但我想知道垃圾收集是否被推迟到运行循环上的当前项目完成执行为止。
如果是这样,那么如果你像这样塑造它也许会起作用:
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();
Run Code Online (Sandbox Code Playgroud)