私たちのアプリケーションはレイテンシが重要です。 GCの一時停止を減らすために、オブジェクトを再利用します。プロセスの始めに、小さなオブジェクトをたくさん割り当ててから、(ほとんど)割り当てられていないメモリを割り当てます。しかし、私はまだgcのログを次のように表示しています。GCの一時停止を回避するにはどうすればよいですか?
2016-12-18T13:51:48.650+0200: 1.085: Total time for which application threads were stopped: 0.0001411 seconds, Stopping threads took: 0.0000203 seconds
2016-12-18T13:51:48.776+0200: 1.210: Total time for which application threads were stopped: 0.0002027 seconds, Stopping threads took: 0.0000183 seconds
2016-12-18T13:51:48.894+0200: 1.328: Total time for which application threads were stopped: 0.0002559 seconds, Stopping threads took: 0.0000194 seconds
2016-12-18T13:51:48.906+0200: 1.341: Total time for which application threads were stopped: 0.0002159 seconds, Stopping threads took: 0.0000199 seconds
2016-12-18T13:51:49.047+0200: 1.482: Total time for which application threads were stopped: 0.0002842 seconds, Stopping threads took: 0.0000208 seconds
これまでのところ、JVMはすべての参照とマークオブジェクトに対して実行するプロセスを停止します。それが正しいか?
また、このようなログの頻度は時間とともに減少しています。だから私はGCがいくつかの内部パラメータをチューニングし、私はそれらを最初に提供したいと思います。今度は次の引数を使ってプロセスを実行します:
-Xms10240m
-Xmx10240m
-server
-XX:+UseG1GC
-noclassgc
GCの詳細に関するすべての引数はありません。私たちのマシンには、gcを完全に回避するのに十分なメモリがあります。どのように私はそれをjavaに説明できますか?
OS:Linux、JVM oracle or openJDK。
ありがとうございます。
0.0002842秒が長すぎますか? – Andreas
280ミル、私たちにとっては長すぎます。 –
0.0002842秒は**ではありません** 280ミリ秒です。それは280マイクロ秒**、別名0.28ミリ秒です。 – Andreas