Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java 7的java字节码在其他版本的java中可以工作吗_Java - Fatal编程技术网

java 7的java字节码在其他版本的java中可以工作吗

java 7的java字节码在其他版本的java中可以工作吗,java,Java,我只是想知道,在一个版本的java中生成的字节码是否可以在其他版本的java上运行一般来说,字节码在新版本的java上运行时不需要修改。它不会在旧版本上运行,除非您使用特殊参数(javac-target)编译它,并特别注意不要使用新的库类。二进制兼容性 根据JVM规范,JavaSE7的类文件版本是51,因为JSR292引入了invokedynamic字节码。Java SE 7编译器生成的51版类文件不能在Java SE 6中使用 JavaSE7与JavaSE6是二进制兼容的,除了。除了注意到的不

我只是想知道,在一个版本的java中生成的字节码是否可以在其他版本的java上运行一般来说,字节码在新版本的java上运行时不需要修改。它不会在旧版本上运行,除非您使用特殊参数(
javac-target
)编译它,并特别注意不要使用新的库类。

二进制兼容性

根据JVM规范,JavaSE7的类文件版本是51,因为JSR292引入了invokedynamic字节码。Java SE 7编译器生成的51版类文件不能在Java SE 6中使用

JavaSE7与JavaSE6是二进制兼容的,除了。除了注意到的不兼容之外,使用JavaSE6编译器构建的类文件将在JavaSE7中正确运行

朋友的话…
编译器不向后兼容,因为使用Java7 JDK生成的字节码不会在Java1.6 jvm中运行(除非使用-target 1.6标志编译)。但是JVM是向后兼容的,因为它可以运行较旧的字节码

因此,他们选择从Javac的角度考虑兼容性(因为它是JDK特有的部分),这意味着生成的字节码可以在JVM的未来版本中运行(这与JRE更相关,但也绑定在JDK中)。 简而言之,我们可以说:

JDK's are (usually) forward compatible.
JRE's are (usually) backward compatible.
Java说

交叉编译选项

默认情况下,类是根据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. 
有关交叉编译的更多信息,请参阅


您可以在谷歌上搜索“java二进制兼容性”,您还需要使用
-source
才能使用
-target
。在某些情况下,在早期版本上编译的源代码会选择不同的重载方法,所以“极度小心”并不能胜任。Netter使用
-bootclasspath
指向早期的
rt.zip
,对于扩展库,有类似于
-Dext.dirs
的东西。但实际上,在这一点上,最好是并行安装JDK。。。