数か月前にセットアップ全体を Java 1.5 から 1.6 (J2EE、Tomcat) に移行した後、Maven がまだ Sun の javac パラメータ「-target 1.5」を介して 1.5 を対象とするクラス ファイルを生成するように構成されていることに気付きました。「-target 1.5」を「-target 1.6」に変更すると、パフォーマンスが向上しますか?
3 に答える
それほど大きな違いはないはずです。1.6ファイルは、バイトコード検証速度を向上させるスタックマップ/テーブル構造を持つことができます(Apache Harmonyはよりスマートなアルゴリズムを使用するだけです)。
1.4に移行した場合、クラス定数の初期ロードは少し遅くなりますが、クラスのロードにかかる時間を考えると、それは関係ありません(新しい形式のldc
バイトコードが置き換えられますClass.forName
が、結果は静的フィールドに格納されます)。
一般的に、それは問題ではありません。ランタイムコンパイラは重要なビットであり、ほとんど同じマシンコードを生成できます。過去には、実行時コンパイラのコードを壊さないように最適化を減らすためにjavacが作成されていましたが、これは-target
フラグとは無関係です。
Java 1.6 は、バイトコード検証のプロセスを簡素化する別の class-file-formatを使用します。したがって、新しいクラス ファイル形式を使用すると、起動時間が少し改善されるはずです。
なぜパフォーマンスに違いがあるのかわかりません。1.5と1.6のクラス形式に大きな違いはありません。他に何も変更がない場合、ターゲットを指定すると、生成されたクラスのクラスバージョンIDが変更されます。