TerracottaのBigMemory

POJO Mojo の「BigMemory Explained a bit...」を読みました。

BigMemoryとはTerracotta社が開発した、Javaで文字通り巨大なメモリを扱うための技術です。

大容量メモリ使用時のガベージコレクション

JVMのヒープサイズが大きいと、ガベージコレクションの停止時間が非常に長くなります。ある巨大電話会社では、ヒープサイズが48GBのときはJVMが5分以上止まることがあり、2GB×80JVM に分割するようにアプリケーションを書き直したそうです。

どのようにしてGCを回避するか

BigMemoryを使うと、JVMのオプションで -Xms に500MBを指定すれば、100GBのメモリを使っていても500MBしかGCの対象にならないのだと言います。しかも、Pure Javaで書かれているそうです。
そのカラクリは、
BigMemory: Off-heap Store
に書いてあります。NIO用のダイレクトメモリを使う方法なんですね。JVMの -XX:MaxDirectMemorySize で指定したサイズがBigMemoryが使えるメモリサイズになるようです。

BigMemory off-heap Storeの性能

このエントリによると、off-heap Storeには350GB程度のキャッシュを置いておくことができ、100マイクロ秒ほどでアクセスできるそうです。ネットワーク上の別マシンにキャッシュを置くよりもずいぶん高速です。

所感

JVMGCの対象にならないメモリ領域の使い方は非常に興味深いです。具体的にはまだよくわかりませんが、そのうち実験してみようかな。