Java でサーバー プロセスのベンチマークを行っていますが、Hotspot は多くの GC を作成していないように見えますが、GC を作成すると、パフォーマンスが大幅に向上します。
ホットスポットに、いくつかの大量の長い GC ではなく、小さな GC を頻繁に作成させることはできますか?
Java でサーバー プロセスのベンチマークを行っていますが、Hotspot は多くの GC を作成していないように見えますが、GC を作成すると、パフォーマンスが大幅に向上します。
ホットスポットに、いくつかの大量の長い GC ではなく、小さな GC を頻繁に作成させることはできますか?
GC を並列または並行に変更してみてください。ここにドキュメントへのリンクがあります。
http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
GC が呼び出されるときに干渉することは、通常は悪い考えです。GC のパフォーマンスに問題がある場合は、eden、survivor、および old スペースのサイズを調整することをお勧めします。
完全なスイープを実行する必要がある場合、呼び出された頻度は問題ではありません。速度は常に比較的遅くなります。高速な gc 呼び出しは、eden および Survivor 空間での呼び出しのみです。
そのため、eden と Survivor のスペースを増やすと問題が解決する可能性がありますが、残念ながら、適切なメモリ プロファイリングを実行するにはかなり時間がかかり、複雑になります。
http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html (他の回答から盗まれたリンク) は、必要に応じてそれを構成する方法に関するオプションも提供します。-XX:NewRatio=2 または -XX:NewRatio=3 を使用すると、速度が向上する可能性がありますが、遅くなる可能性もあります。残念ながら、これはアプリケーションに大きく依存します。
System.gc()によって、プログラムでガベージ コレクションを実行するように JVM に指示できます。Javadoc によると、これは単なる提案であることに注意してください。GC パフォーマンスの低下を望まないクリティカル セクションに入る前に、これを呼び出してみることができます。
若い/新しいサイズを減らすか、gc をより頻繁に呼び出すことで、GC の実行頻度を増やすことができます。これは、一時停止する時間が短くなるという意味ではなく、より頻繁に発生するということです。
GC の影響を軽減する最善の方法は、アプリケーションのメモリ プロファイリングを行い、生成するガベージの量を減らすことです。これにより、コードが高速になるだけでなく、各 GC が発生する頻度と時間が短縮されます。
より極端なケースでは、GC の発生頻度を 1 日 1 回未満に減らして、GC を問題としてまとめて取り除くことができます。