これは私の質問に関連しています。JavaExcelPOIは、quartzによる複数の実行後に停止します。
数回繰り返すと、プログラムが予期せず停止します。プロファイリングを試したところ、反復ごとに大量のヒープメモリを消費していることがわかりました(そして、どこかでメモリリークが発生しました。まだバガーが見つかりませんでした)。そこで、一時的な解決策としてSystem.gc();
、プログラムの完全な実行の最後に挿入してみました(プログラムの簡単な説明については、リンクされた質問を読んでください)。私はあまり期待していませんでした。おそらく、各反復の後にさらにいくつかのヒープスペースが利用可能になるでしょう。しかし、を挿入すると、プログラムが使用するヒープメモリが少なくなるようSystem.gc();
です。
上のグラフは実行中のプログラムを示し、System.gc();
下のグラフは実行されていないプログラムを示しています。ご覧のとおり、上のグラフは、プログラムの4回の反復後に100 mb未満しか使用していないことを示していますが、下のグラフは、同じ反復回数で100mbを超える使用量を示しています。System.gc();
誰かが私のヒープでこの効果を引き起こす方法と理由を明確にできますか?プログラムでこれを使用した場合に不利な点はありますか?それとも私はプログラミングに完全に絶望的で、代わりに写真を撮りますか?
各プログラムの反復の最後にGCを挿入したことに注意してください。したがって、ヒープの使用量は、System.gc();
コマンドを満たすまでGCを挿入しない場合と同じである必要があると思います。
ありがとう!