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