3

Javaメモリリークの修正を学ぶのに最適な場所はどこですか? 私は NET で良いリソースを見つけようとしてきましたが、残念なことに、おもちゃの例が議論されているのを見つけました。小さなおもちゃのダンプのトラブルシューティングもできますが、実際のアプリケーションのダンプはより難しく、手がかりがほとんどありません。

Jhat、JMap、VisualVM、MAT などのツールを試しました。

Java メモリ リークの修正について学ぶのに最適な場所はどこですか? 本の紹介も大歓迎です。

前もって感謝します。

4

2 に答える 2

2

多くの種類のメモリリークがありますが、実際には次の戦略で良い結果が得られます(免責事項:JProfilerのスクリーンショットを表示しています。これは、私の会社が開発しているためです)。

1.最大のオブジェクトを確認します

「最大のオブジェクト」は、他の誰も保持していない多くのメモリを保持します。JProfilerでは、ヒープウォーカーの「最大オブジェクト」ビューにあります。これは、キャッシュでよく発生します。

ここに画像の説明を入力してください

2.インスタンスの多いクラスを確認します

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

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

多くの場合、これは複数のステップからなるプロセスであり、参照チェーンや割り当てスポットを選択したり、オブジェクトの内容に基づいて選択したりします。

3.GCルートへのパスを検索します

それでも手がかりが得られない場合は、単一のオブジェクトを選択して、ガベージコレクターのルートにつながる参照チェーンを表示できます。それはあなたの多くがそれを試みる前に疑わしいオブジェクトのオブジェクトセットを絞り込むことができたのを助けます、さもなければあなたはたくさんの候補者を持っているかもしれません。

ここに画像の説明を入力してください

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

于 2012-07-31T09:13:17.753 に答える
2

インターネットで検索してみましたか?多くのがあります。優れた検索エンジンは、関連性によってそれらをソートします。

于 2012-07-30T18:27:35.413 に答える