私は Java 7 へのアップグレードに非常に興味を持っていました (私自身の利己的なコーディング上の理由から)。ただし、遅延に非常に敏感なユーザーがいます (すべてがサブミリ秒である必要があります)。3 つの異なる JVM 間で簡単なパフォーマンス比較テストを行ったところ、Java 7 の方がはるかに遅いことがわかりました。このテストでは、いくつかの単純なメッセージをアプリケーションにプッシュしました。このテストは、数秒ごとに 1 つのメッセージをプッシュする低負荷の負荷ボリューム テストです。結果は次のとおりです (マイクロ秒単位):
- Hotspot 6 (build 24): msgs= 23 avg= 902
- JRockit 6 (R28 b 29): msgs= 23 avg= 481
- Hotspot 7 (build 04): msgs= 34 avg=1130
Oracle の戦略は、Java 7 から JRockit と Hotspot を統合することです (したがって、JRockit 6 が利用可能な最後の製品です)。パフォーマンスが非常に悪い理由を誰かが知っていますか? (注意すべき点の1つは、コードがJava 1.6でコンパイルされたことです。それがそれを説明するかどうかはわかりません...)
更新:コメントから、これを建設的な質問にするのに十分な情報を実際に伝えることができないことがわかるため、私は自分の質問を閉じることに投票しました。コメントしてくれたすべての人に感謝します。
更新: より多くのフィードバックの後、私はより多くの情報を提供すると思いました. テストは常に新たなスタートの後に行われます。すべての因子は、各検定で同じです。変更されるのは JVM だけです。テストを複数回繰り返すと、一貫した結果が得られます。どのテスト反復でも GC は発生しませんでした。
以下は、テスト実行の 1 つのグラフ化された値です。JRockit と Hotspot 7 の両方で、最初のレイテンシ値が除外されました。JRockit には大きな最初の価値がありますが、その後すぐに最適化され、平均値に落ち着きます。Hotspot 7 は最適化に時間がかかり、平均値が JRockit ほど低くなることはありません。各データ ポイントは、TCP/IP ソケットからメッセージを読み取り、ビジネス ロジックを実行し、別のソケットにメッセージを書き込むマイクロ秒を表します。すべてのメッセージは同一であり、どのメッセージにも新しいコード パスは入力されません。