私たちのプログラムの 1つで、OutOfMemory
あるユーザーのマシンでエラーが発生することがありますが、もちろん私がテストしているときはそうではありません。JProfiler を使用して実行し (これまで使用したことがないため、10 日間の評価ライセンスで)、コード プレフィックスでフィルタリングすると、合計サイズとインスタンス数の両方で最大のチャンクは、特定の単純なクラスの 8000 以上のインスタンスです。 .
JProfiler の [ガベージ コレクション] ボタンをクリックすると、他のクラスのほとんどのインスタンスが消えましたが、これらの特定のインスタンスは消えませんでした。同じインスタンスで再度テストを実行すると、クラスの 4000 以上のインスタンスが作成されましたが、[ガベージ コレクション] をクリックすると、それらは元の 8000 以上のインスタンスを残して消えてしまいました。
これらのインスタンスは、さまざまな段階でさまざまなコレクションにスタックします。それらがガベージコレクションされていないという事実は、何かがコレクションの1つへの参照を保持しているため、オブジェクトへの参照を保持していることを意味するに違いないと思います。
何が参照を保持しているのかを理解する方法はありますか? コードで何を探すべきかの提案と、ある場合は JProfiler でこれを見つける方法を探しています。