6章ガベージコレクションのアルゴリズム

5章では、すべてのガベージコレクターに共通のふるまいを明らかにしました。具体的には、すべてのアルゴリズムで利用できるフラグ(ヒープや各領域のサイズ、ログの記録など)を中心に解説しました。

多くの状況では、このような基本的なチューニングだけでも十分です。もし十分ではないというケースに遭遇したら、ガベージコレクションのアルゴリズムごとに固有の事柄について検討しましょう。そしてパラメーターをチューニングし、アプリケーションに対するガベージコレクションの影響を最小限にとどめましょう。

ガベージコレクターのチューニングにとって、キーになるのはログのデータです。この章では、それぞれのアルゴリズムでのログをまず紹介します。これを通じてアルゴリズムへの理解を深め、よりよい動作のためにはどうすればよいか学びます。それぞれの節ごとに、よりよいパフォーマンスを発揮するチューニングを紹介します。

すべてのアルゴリズムに対して影響を与えるような、特殊なケースがいくつかあります。例えばとても大きなオブジェクトや、短命でも長命でもないオブジェクトの割り当てなどです。これらについてはこの章の最後でまとめて解説します。

6.1 スループット型ガベージコレクターを理解する

個々のガベージコレクターについてこれから見ていきますが、その手始めはスループット型です。ここでは、young領域の解放とold領域の解放という2つの処理が行われます。

図6-1はyoung領域に対する処理前後でのヒープの様子を表しています。

図6-1 スループット型ガベージコレクターでの、young領域に対する処理

eden空間がいっぱいになると、young領域に対する処理が始まります。ここでは、すべてのオブジェクトがeden空間から出されます。そのうちのいくつかはsurvivor空間(例ではS0)に移され、他のものはold領域に移されます。このため、old領域のオブジェクトの数は増加します。残りの多くは、どこからも参照されていないため破棄されます。 ...

Get Javaパフォーマンス now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.