Firefox web browser - Faster, more secure & customizable |
Mozillaは7月6日(米国時間)、「Compacting Garbage Collection in SpiderMonkey ✩ Mozilla Hacks - the Web developer blog」において、Firefox 38で実装されたガベージコレクタの新しいメモリ圧縮技術(Compacting Garbage Collection)について伝えた。Firefox 38にはJavaScriptのヒープで発生するフラグメンテーションを抑える機能が実装されており、これまでよりもメモリの使用量が少なくなっている。
Firefoxではヒープ領域をアリーナと呼ばれる4KBのブロックごとに分けて管理している。アリーナはさらに固定長のサイズの集まり(セル)を持っている。セルにはJavaScriptオブジェクト、文字列、シンボルが入っている。つまり、アリーナが使われているセルで満たされている場合はメモリの使用効率が良いが、セルがあまり入っていないアリーナが多いと、メモリの使用効率が低いということになる。
Firefox 38で実装されたコンパクト機能は、空きの多いアリーナ同士を統合してメモリの利用効率を引き上げようというもの。例えば、JavaScriptオブジェクトのセルを含むアリーナが2つあったとして、それぞれ半分もメモリが使われていないのであれば、統合して1つのアリーナにまとめることができる機能だ。
「Compacting Garbage Collection in SpiderMonkey ✩ Mozilla Hacks - the Web developer blog」には、技術的にどのようにしてコンパクトの対象となるセルを判断しているかなどについても説明されている。Firefox 38ではJavaScriptオブジェクトのみが圧縮の対象になっているが、今後は他のデータに関しても同様のテクニックを実装できないか検討していくとしている。