多くの種類のメモリリークがありますが、実際には次の戦略で良い結果が得られます(免責事項:JProfilerのスクリーンショットを表示しています。これは、私の会社が開発しているためです)。
1.最大のオブジェクトを確認します
「最大のオブジェクト」は、他の誰も保持していない多くのメモリを保持します。JProfilerでは、ヒープウォーカーの「最大オブジェクト」ビューにあります。これは、キャッシュでよく発生します。

2.インスタンスの多いクラスを確認します
場合によっては、参照がより複雑になり、最大のオブジェクトが手がかりを与えないことがあります。多くのインスタンスを持つクラスは、着信参照をチェックできます。まず、累積された参照を調べて、有効な参照チェーンを疑わしい参照チェーンから分離すると便利です。

また、インスタンスがどこに割り当てられているか(インスタンスがどのように参照されているかではなく)をチェックすることで、何が起こっているかについての洞察を得ることができます。

多くの場合、これは複数のステップからなるプロセスであり、参照チェーンや割り当てスポットを選択したり、オブジェクトの内容に基づいて選択したりします。
3.GCルートへのパスを検索します
それでも手がかりが得られない場合は、単一のオブジェクトを選択して、ガベージコレクターのルートにつながる参照チェーンを表示できます。それはあなたの多くがそれを試みる前に疑わしいオブジェクトのオブジェクトセットを絞り込むことができたのを助けます、さもなければあなたはたくさんの候補者を持っているかもしれません。

このトピックに関するスクリーンキャストもあります。