Java 7を使用して記述された古いアプリケーションがあります。Java 8 JREで正常に動作します。 Java 8の機能を利用するためにコードを書き直すつもりはありません。コンパイルされたコードを最新のJava 8 JDKにアップグレードすることに技術的な利点はありますか?
明確にするために、コードは現在Java 7でコンパイルされており、すでに最新のJava 8 JREで実行されています。 Java 8ランタイムの改善から既に恩恵を受けるはずです。この質問は、バージョン8でコンパイルし、Java 8コンパイル済みバイトコードで実行することで利点が得られるかどうかです。
また、開発者の生産性などの非技術的な利点については関係ありません。これらは重要だと思いますが、この質問のポイントではありません。開発チームがいない本番用コードを求めています。純粋にメンテナンスモードです。
私が質問を正しく理解していれば、Java 8でJava 7よりもjavac
によって生成されたバイトコードが「より良い」かどうかを知りたいと思うでしょう。
答えはおそらくそうではなく、コンパイラのバグを常に修正しているため、バイトコードがより効率的になる場合があります。ただし、Java 8のこれらの修正による大幅な高速化は見られませんが、 changelog はバージョン間の2つの大きな変更のみをリストします。
OracleのWebサイトはひどく、バージョン間のjavac
に関連するバグ修正のリストを取得できないようですが、 OpenJDKの完全なものではありません です。私が見つけることができるものの大半は、エラーの修正です。したがって、Java 8に更新することにより、javac
がJLSにより正確に追従するため、コンパイルできなくなる可能性があり、バイトコードの「改善」はほとんどまたはまったくありません。
主な利点は、Java 8に最新のバグ修正があり、Java 7が公開されていないことです。
また、Java 8 JVMでコードを実行する場合は、Javaの1つのバージョンのみをインストールすることもできます。
Java 8はより高速である可能性があり、G1などの新機能のサポートが向上しています。ただし、ユースケースでは処理が遅くなる可能性があるため、知る唯一の方法はテストすることです。
コンパイルされたコードを最新のJava 8 JDKにアップグレードすることに技術的な利点はありますか?
Java 7コードをJava 8コンパイラで再コンパイルすることに利点があるかどうかを尋ねる場合、答えは次のとおりです。ほとんど何も。
唯一の微妙な違いは、Java APIにわずかな違いがあることです。したがって、Java 8コンパイラーはJava 7
その他の小さな違いは、ファイルの先頭にあるマジックナンバー、おそらく定数プールの順序です。バイトコードは基本的に同じです。ラムダ用に追加されたinvokedynamic
のサポートもJava 7に存在していましたが、そのようには使用されませんでした。
awarenessを作成すると役立ちます。
Java8に切り替えると、javacによって追加の警告が発行される場合があります。例:type inferenceは、Java8で大幅に改善されました。そして、それはあなたの現在のコードベースで@SuppressWarningsアノテーションの必要性を排除することができます(そして、そのようなアノテーションがもはや必要でないとき、コンパイラはそれについて警告します)。
そのため、今日コードベースを変更するつもりがない場合でも、Java8に切り替えるとそのようなことがわかります。知識を増やすことは、十分な情報に基づいた意思決定に役立ちます。
一方:
簡単に言えば、いくつかの微妙な利点と特定のリスクがあります(リスクの重要性は主に全体的なセットアップに依存します)。
私はこれらの事実を少なくともにします。
1)HashMap内部(jdk-8では高速です)
2)多くのバグが修正され、mightが透過的になり(実行時最適化)、実際に何もしなくてもコードがより速く、より良くなります。
3)G1ガベージコレクター
編集
技術的な観点からは、これはAhead of Time Compilationまたはコンパイラーがコードをさらに分析することで改善する可能性があることに似ています。私の知る限り、そのようなことはJava 8コンパイラでは行われません。
開発者の観点から-たくさんあります。生産性の向上は私にとって最も重要なものです。
編集2
2番目のクエリに一致する2つのポイントのみを知っています。
-パラメーター
メソッドのパラメーター名を保持します。
-プロフィール
フットプリントを小さくするためにCompact Profile Optionと呼ばれます。