0

アプリケーションの説明: グラフの生成に使用する Java のアプリケーションがあります。ユーザーは、必要に応じて GUI を使用してチャートを設定できます。

問題の説明: グラフが作成されると一定量のメモリが使用され、新しいグラフが作成されると、前のグラフで使用されたメモリが GC によって自動的にクリアされませんが、System.gc() ステートメントを挿入すると、メモリはクリアしました。新しいチャートが生成されるたびに、メモリがすべてのデッド オブジェクトをクリアするようにします。

質問 GC が Java のように自動的に機能しないのはなぜですか? ご意見ありがとうございます。

4

2 に答える 2

2

使用しないでくださいSystem.gc。メモリがクリアされる保証はなく、コードに他の問題があることを示しています。GC は正常に機能し、通常は問題の原因ではありません。

GC に障害があることをどのように知ることができますか? 考慮すべきいくつかのオプション:

  • コードのプロファイリングを行って、メモリがどのように使用されているか、およびメモリが解放されているかどうかを確認しましたか?
  • 物を必要以上に長く握っていませんか?
  • 問題がなければ、 と を使用してヒープ サイズを増やしてみましたXmxXms?
  • もう 1 つのオプションは、GC を調整して希望どおりに動作させることを検討することです。

GC で処理されたシステムの利点は、(ほとんどの場合) メモリ管理について心配する必要がなく、GC が処理してくれることを信頼できることです。気にする必要があるのは、ヒープからトップを吹き飛ばしているかどうかだけであり、説明したことから、メモリが不足しているようには見えません。GC が適切と判断した時点で未使用のメモリを収集するので安心できます。動作を制御するには、GC を調整する必要があります。

于 2013-10-29T17:41:47.743 に答える
2

Java では、ガベージ コレクターがいつ実行されるかについての保証はありません。アイデアは、メモリについて心配する必要がないということです。メモリが必要になるまでに、ガベージ コレクタは十分なスペースをクリーンアップしているはずです。

必要なときに十分なスペースを確保できない場合は、OutOfMemoryError.

System.gc()は、ガベージ コレクションに適したタイミングをガベージ コレクターに通知するのに役立つヒントです。ただし、必ずしもガベージコレクターを開始するとは限りません。

于 2013-10-29T17:42:14.740 に答える