7章ヒープのベストプラクティス

5章と6章では、ガベージコレクターのチューニングを通じてプログラムへの影響を最小限にとどめるための方法を詳しく紹介しました。このようなチューニングももちろん重要ですが、ベストプラクティスに従ってプログラミングを行うほうが効果的なことがよくあります。この章では、Javaでのヒープの使い方に関するベストプラクティスをいくつか紹介します。

ここでは、相反する2つのゴールを追求します。一般的には、オブジェクトを生成する回数を減らし、必要なくなったらすぐに廃棄するべきというルールがあります。メモリの使用量を減らすというのは、ガベージコレクターの効率を上げる上で最も効果的です。一方、同じ種類のオブジェクトを何度も生成するというのは(ガベージコレクションのパフォーマンスは向上しますが)全体としてのパフォーマンスの悪化につながります。このようなオブジェクトを破棄せず再利用するようにすれば、パフォーマンスは大きく向上するでしょう。オブジェクトを再利用するための方法は多数考えられており、例えばスレッドローカル変数や特別なオブジェクト参照、オブジェクトプールなどを利用できます。再利用されるオブジェクトは長命になるため、ガベージコレクターの処理に若干の影響はあります。しかし、オブジェクトを適切に再利用できれば全体としてのパフォーマンスは向上します。

この章では両方のアプローチを取り上げ、それぞれのトレードオフを明らかにします。その前にまず、ヒープの中で起こっていることを知るためのツールについて学ぶことにしましょう。

7.1 ヒープの分析

ガベージコレクションのログや5章で紹介したツールは、アプリケーションに対するガベージコレクションの影響を理解するために大きく役立ちます。これ以上の分析が必要な場合は、ヒープ自体について見てみましょう。これから紹介するツールを使うと、アプリケーションが現在どのようなオブジェクトを利用しているのか把握できます。 ...

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

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.