6

ちょうど今日、匿名クラスとして作成された多数のオブジェクトを使用してアプリでメモリ リークを発見しました。各オブジェクトに独自のクラスが定義され、ヒープに配置されるのは典型的な例でした。

実行時メモリー・プロファイラーで見つけるのは簡単ではありませんでしたし、Eclipse メモリー・アナライザーによって行われたヒープ・ダンプ分析も役に立ちませんでした。

実行時に作成されたすべての匿名クラスをスレッド ID (または少なくとも親クラスローダー) でログに記録する方法を考えていました。

このたった1つのことだけで、根本原因を見つけることは簡単になると思います.

4

1 に答える 1

2

すべての匿名クラスをリストしてもどこにでも行けるかどうかはわかりません。通常、匿名クラスはたくさんあります。

おそらく必要なのは、内部クラス参照 (匿名クラスを含む) によって保持されているクラスのインスタンスを検索するためのロジックです。

JProfilerには、対応するインスペクションがあります

ここに画像の説明を入力

インスペクションによって作成されたオブジェクト セットには、そのようなインスタンスがすべて含まれているため、GC ルートへのパスを表示できます。

ここに画像の説明を入力

免責事項: 私の会社は JProfiler を開発しています。

于 2015-12-08T14:54:38.273 に答える