次の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アプリケーションを最適化して、使用するメモリを少なくしようとしています。ですので、ご意見をお聞かせください。これはChromeのバグですか?コードの実行中にガベージコレクションを明示的に呼び出すための回避策を知っていますか(FFおよびIEではそれらが存在するようです)。ありがとう!
編集:ChromeInspectorに「CollectGarbage」というボタンが存在するようです。インスペクターの「タイムライン」パネルの下のバーにある7番目のボタンです。これは、JavascriptからGCを呼び出す方法が存在することを意味しませんか?結局のところ、インスペクターの一部はJavascriptで書かれていませんか?