後方バイナリ互換性(または下方互換性)-構築されたクライアントの能力古いバージョンのライブラリAPIを使用して、新しいバージョンで実行します( wiki )。
Upwardバイナリ互換性(またはforward互換性)-クライアント構築機能古いバージョンで実行するライブラリAPIの新しいバージョン( wiki ).
JDKに関する一般的なSunのドキュメント 1.4.2以降のJ2SE 5.0の非互換性 (および J2SE 5.0とのJava SE 6の互換性 も)では、JDKの互換性について次のように説明しています。
JDK 5.0は、upwardsとバイナリ互換です。Java 2 SDK、v1.4.2は、以下の非互換性を除きます。は、注記された非互換性を除いて、バージョン1.4.2コンパイラでビルドされたクラスファイルがJDK 5.0で正しく実行されることを意味します。
この文章では、ドキュメンテーションライターはmixed upという用語に「上位」と「下位」の互換性があると思います。それらは「後方」互換性について記述していますが、この機能を「上位」互換性と呼びます。
これはタイプミス、間違い、または意図した用語ですか? JDKは「上位」または「下位」に対応していますか?
下位互換性のあるものには、(意図的または意図せずに)上位互換性のある対応物が必要であることに注意してください。たとえば、DVDリーダーはCDと下位互換性がありますか、またはCDはDVDリーダーと上位互換性がありますか?
この場合、コンパイラ(または生成するバイトコード)を見るか、仮想マシンを見るかによって異なります。
Java5 JDKで生成されたバイトコードはJava 1.4 jvm(-target 1.4
フラグでコンパイルされていない場合)で実行されないため、コンパイラは下位互換性がありません。古いバイトコードを実行できます。
だから私は彼らがjavacの観点から互換性を考慮することを選んだと思います(JDKに固有の部分であるため)、生成されたバイトコードはjvmの将来のリリースで実行できることを意味します、JDKにもバンドルされています)。
簡単に言えば、次のように言えます。
(そして、それはずっと前に学ばなければならない教訓としても役立ちます:コンパイラを書く人々は通常正しいです、そして私たち人々はそれらを間違ったxDを使用します)
ところで、後方/前方と下方/上方を組み合わせることは、それらを混合するよりも意味がありますか?
最新のJavaを含むように回答を拡張する…
オラクルの日付なしページからの引用:
互換性は複雑な問題です。このドキュメントでは、Javaプラットフォームのリリースに関する3つのタイプの潜在的な非互換性について説明します。
- Source:ソースの互換性は、Javaコードがまだコンパイルされているかどうかを含むソースコードをクラスファイルに変換することに関するものです。
- Binary:バイナリ互換性は、Java Language Specificationでエラーなしでリンクする機能を保持するものとして定義されています。
- Behavioral:動作の互換性には、実行時に実行されるコードのセマンティクスが含まれます。
…そして
Java SE 7とJava SE 6Java SE 7は、以前のバージョンのJavaプラットフォームと強力な互換性があります。ほとんどすべての既存プログラムは、修正なしでJava SE 7で実行する必要があります。 、JREとJDKには、まれに発生する可能性のあるソースとバイナリの非互換性がいくつかあり、完全性のためにここに記載されている「コーナーケース」があります。
Java SE 7言語、JVM、またはJava SE APIの非互換性
…そして
JDK 7 javac、HotSpot、またはJava SE APIの非互換性
(そこには前文はありません-単に非互換性のリストです。)
後方のみ。フォワードコンパット(「それ以降のバージョン用の入力を正常に受け入れる」)では、1.5 JVMが1.6コンパイル済みコードを実行できる必要がありますが、実行できません。
後方には「古いデバイスで生成された入力を処理できる場合」が必要です。これは、1.6 JVMが1.5コンパイル済みコードを実行できるためです。
JDK/JREの各リリースは、Javaバイトコードのバージョンと一致します。各コンパイラは、特定のバイトコードバージョンのコードを生成します。各JVMは、特定のバイトコードバージョンの以前のバージョンを認識します。
JVMがクラスをロードすると、バイトコードのバージョンがチェックされ、JVMの最新の認識バージョンよりも大きい場合は、エラーが発生します。 (ClassVersionErrorまたは何か)。
Java(VM)は下位互換性があります。 Java 1.4.2は1.5および6 VMで実行されます。JDKコンパイラは下位互換性がありません。したがって、コードをJava 1.5たとえば、1.4.2で実行します。
JDKは下位互換性があります。つまり、1.4.2仕様に準拠するバイトコードはJava 5 JVMで実行されます
JDKは、wikiの定義に従って下位互換性があります。
後方互換性が必要です。