4

私のプログラムはメモリリークの傾向を示しました。メモリ使用量がピークに達すると、GC カウントが増え、オブジェクトがガベージ コレクションされました。

メモリ リーク傾向の原因となっているクラスが見つかりました。

しかし、クラスが実際にガベージ コレクションされた理由を確認したいと思います。クラスを調べたところ、クラスには一時オブジェクトが 1 つしかありませんでした。

一時オブジェクトは、シリアル化されていないオブジェクトです。しかし、一時的な性質はガベージ コレクションと関係があるのでしょうか?

4

5 に答える 5

8

一時的なオブジェクトのようなものはありません。シリアル化中に無視される一時的なフィールドがありますが、ガベージ コレクションには影響しません。

基本的に、リークを他の場所で探す必要があると思います (実際にリークがある場合)

于 2013-01-15T09:44:23.910 に答える
2

一時的な性質は、収集されたガベージで何かをする必要がありますか?

いいえ、別に。

キーワードは、transientシリアル化されるべきではないことを示しているため、逆シリアル化されたオブジェクトは、そうでない場合よりも小さいことを意味します。

メモリ リーク傾向の原因となっているクラスが見つかりました。

必要のないときにそのようなオブジェクトをコレクションに保持しているため、メモリ リークが発生します。この方法で保持するオブジェクトは、不要になったときに確実に削除する必要があります。


データを保持しているからといって、リークがあるとは限りません。そのデータが必要になる可能性があるため、予想よりも多くのメモリが必要になります。この場合、-Xmxまたは-mxコマンド ライン オプションを設定して、最大メモリを増やす必要があります。

于 2013-01-15T09:44:43.937 に答える
1

いいえ、関係はありません。GCが最終的にすべてを適切にクリーンアップした場合、メモリリークが発生することはありません。それがGCの仕組みです。GCの遅延について心配する必要はありません。心配している場合は、JVM引数を調整するだけです。

于 2013-01-15T09:45:12.180 に答える
0

一時性はガベージコレクションに影響しません。

  • おそらく、タイトループで使用されているオブジェクトを探します。オブジェクトが相互に参照している場合、ガベージコレクションの速度が低下する可能性があります。

  • おそらく、Javaの弱参照を使用して探索してください。

  • おそらく、ガベージコレクションの設定を調整することを検討してください。ConcurrentSweepGCが役立ちます。

  • おそらく、より多くのスタックとヒープスペースを割り当てることを検討してください。

于 2013-01-15T09:45:39.283 に答える
0

「ガベージ コレクションが可能な一時オブジェクト」は Java に存在しますWeakReference。gc が実行されるとすぐに収集する必要があるオブジェクトやSoftReference、保持する方がよいがメモリが不足した場合に破棄する必要があるオブジェクトに使用します。

このtransientキーワードは、メモリ管理には影響しません。

于 2013-01-15T09:52:22.400 に答える