あるバージョンの Java で生成されたバイトコードが他のバージョンの Java で動作するかどうかを知りたかっただけです。
2 に答える
一般に、新しいバージョンの Java では、バイトコードは変更なしで実行されます。javac -target
特別な引数 ( ) を付けてコンパイルし、新しいライブラリ クラスを使用しないように細心の注意を払わない限り、古いバージョンでは実行されません。
バイナリ互換性
Java SE 7 のクラス ファイル バージョンは、JSR 292 によって導入された invokedynamic バイト コードのため、JVM 仕様に従って 51 です。Java SE 7 コンパイラによって生成されたバージョン 51 クラス ファイルは、Java SE 6 では使用できません。
Java SE 7 は、非互換性を除いて Java SE 6 とバイナリ互換です。記載されている非互換性を除き、Java SE 6 コンパイラでビルドされたクラス ファイルは Java SE 7 で正しく実行されます。
友人
の言葉 ... Java7 JDK で生成されたバイトコードは Java 1.6 jvm で実行されないため、コンパイラには後方互換性がありません (-target 1.6 フラグでコンパイルされない限り)。ただし、JVM は古いバイトコードを実行できるため、下位互換性があります。
そのため、javac の観点から互換性を考慮することにしました (JDK に固有の部分であるため)。つまり、生成されたバイトコードは jvm の将来のリリースで実行できます (これは JRE により関連していますが、 JDK にもバンドルされています)。
簡単に言えば、次のように言えます。
JDK's are (usually) forward compatible.
JRE's are (usually) backward compatible.
ジャワは言う
クロスコンパイル オプション
デフォルトでは、クラスは javac が同梱されているプラットフォームのブートストラップおよび拡張クラスに対してコンパイルされます。ただし、javac はクロスコンパイルもサポートしています。クロスコンパイルでは、異なる Java プラットフォーム実装のブートストラップおよび拡張クラスに対してクラスがコンパイルされます。クロスコンパイル時には -bootclasspath と -extdirs を使用することが重要です。以下のクロスコンパイルの例を参照してください。
-target version
Generate class files that target a specified version of the VM. Class files will run on the specified target and on later versions, but not on earlier versions of the VM. Valid targets are 1.1, 1.2, 1.3, 1.4, 1.5 (also 5), 1.6 (also 6), and 1.7 (also 7).
The default for -target depends on the value of -source:
If -source is not specified, the value of -target is 1.7
If -source is 1.2, the value of -target is 1.4
If -source is 1.3, the value of -target is 1.4
If -source is 1.5, the value of -target is 1.7
If -source is 1.6, the value of -target is 1.7
For all other values of -source, the value of -target is the value of -source.
-bootclasspath bootclasspath
Cross-compile against the specified set of boot classes. As with the user class path, boot class path entries are separated by colons (:) and can be directories, JAR archives, or ZIP archives.
クロスコンパイルの詳細については、 http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html#crosscomp-optionsを参照してください。
http://www.oracle.com/technetwork/java/javase/compatibility-417013.htmlで私よりも優れています