3

Java SE 6で宣伝されているパフォーマンスの向上について疑問に思っていましたが、それはコンパイラーですか、それともランタイムですか?言い換えると、JDK6によってコンパイルされたJava5アプリケーションは、JSE 5で実行される改善(コンパイラーの最適化の改善を示す)を確認できますか?JDK5によってコンパイルされたJava5アプリケーションは、JSE 6で実行される改善(ランタイム最適化の改善を示す)を確認しますか?

JDK 6でのコンパイルには、まったく同じコードベースのJDK5でのコンパイルのほぼ2倍の時間がかかることに気づきました。その余分な時間の少なくとも一部がコンパイラの最適化に費やされ、JARとWARのパフォーマンスが向上することを願っています。SunのJDK情報では、パフォーマンスの向上について詳しくは説明されていません。A列から少し、B列から少しだと思いますが、どちらがより大きな影響を与えているのでしょうか。JDK6とJDK5で行われたベンチマークを知っている人はいますか?

4

4 に答える 4

7

Java ソースからバイトコードにコンパイルする javac は、ほとんど最適化を行いません。実際、最適化を行うと、後で最適化するための分析が難しくなるため、実際にはコードの実行が遅くなることがよくあります。

1.5 と 1.6 で生成されたコードの唯一の大きな違いは、 -target 1.6 を使用すると、スタックの状態に関する追加情報が追加され、検証がより簡単かつ迅速になることです (Java ME もこれを行います)。これは、クラスの読み込み速度にのみ影響します。

真の最適化部分は、バイトコードをネイティブ コードにコンパイルする hotspot コンパイラです。これは、一部の更新リリースでも更新されます。Windows では、低速のクライアント C1 バージョンのホットスポットのみがデフォルトで JRE に配布されます。サーバー C2 ホットスポットは高速に実行されますが (Java コマンド ラインで -server を使用)、起動が遅くなり、より多くのメモリを使用します。

また、ライブラリとツール (javac を含む) では、最適化作業が行われることがあります。

JDK 6 が JDK 5 よりもコードのコンパイルに時間がかかると感じている理由がわかりません。セットアップに微妙な違いはありますか?

于 2008-09-18T14:40:49.107 に答える
3

I have not heard about improvements in the compiler, but extensive information has been published on the runtime performance improvements.

Migration guide:

http://java.sun.com/javase/6/webnotes/adoption/adoptionguide.html

Performance whitepaper:

https://www.oracle.com/java/technologies/javase/6performance.html

于 2008-09-18T14:38:26.400 に答える
1

そのほぼ100%の実行時間。いくつかの基本的なコンパイルトリックをJavaコンパイラ自体に組み込むことは可能ですが、Java1.5と1.6の間に大きな改善はないと思います。

于 2008-09-18T14:34:12.510 に答える
1

新しい Java 仮想マシンには、多くの新しい改善と最適化が行われています。したがって、パフォーマンスが向上する主な部分は、バージョン 6 の jvm で Java を実行している場合です。

Java 6 JDK を使用して古い Java コードをコンパイルすると、おそらくより効率的なコードが生成されますが、主な改善点は仮想マシンにあります。少なくとも、それは私が気づいたことです。

于 2008-09-18T14:38:12.390 に答える