マルチスレッドで作業しているときに絶対に使用する必要がある JVM オプションがあるかどうか疑問に思っていましたか?
いいえ。
ヒープを構成する必要がありますか?
いいえ、ヒープ サイズを適切な値に設定する以外は (-Xmx および -Xms を使用)
GC も構成する必要がありますか?
いいえ、「ローポーズ」が特に必要な場合を除きます。現在「応答性」の目標を達成している場合は、デフォルトのスループット コンパイラが最適なオプションです。これらの目標を達成できない場合は、CMS または G1 を検討する必要があります。ただし、一時停止は減りますが、スループットも低下することに注意してください。
ガベージ コレクションを最小限に抑える必要がありますか?
いいえ、それは賢明な目標ではありません。あなたの目的はスループットを最大化することであり、GC を最小化しても必ずしもそれが達成されるとは限りません。多くの場合、ガベージの生成を避けるためにアプリケーションに余分な作業をさせるよりも、ガベージを生成する方が効率的です。(また、Peter Lawrey が指摘したように、モードの複雑なコードを作成して維持するための開発者の労力も余分に必要になります。)
プロファイラーを使用して、アプリケーションが他の生産的な作業に比べて多くの時間 (CPU 時間または経過時間) を費やしているかどうかを確認することをお勧めします。そうでない場合、またはアプリケーションがすでに十分に高速に実行されている場合は、JVM オプションをいじらないでください。
アプリケーションが将来の負荷の増加に対応できないことが心配な場合は、GC を微調整してもスケーリングされません。より良いオプションは、ハードウェアのスケールアップを調査したり、複数のマシンで作業を行う方法を見つけたりすることです。さらに、GC を調整して現在の負荷でパフォーマンスを向上させると、実際には負荷が増加したときにパフォーマンスが低下する可能性があります。(CMS が追いつかず、回復するために完全なストップザワールド コレクションを実行しなければならない場合に、CMS で発生する問題を考えてみてください。)
最後に、多くのスレッドを持つことは一般的に悪い考えです。少数のワーカー スレッド (プロセッサ/コアの数にほぼ等しい) を使用し、それらに同時キューなどを介して作業を供給することをお勧めします。