Ste*_*n C 41
如果我在最新的JDK中编译了一个java文件,那么旧的JVM是否能够运行.class文件?
这取决于三件事:
您正在谈论的实际Java版本.例如,1.4.0 JVM可以运行由1.4.2编译器编译的代码,但1.3.x JVM不能运行1.
使用的编译标志.有一个-target编译器标志,告诉它生成将在较旧(目标)JVM上运行的代码.而-source编译器标志告诉它只能接受老版本的JVM的语言功能.(这种方法并不总是有效,取决于代码使用的Java语言特性.但是如果代码编译它应该有效.)
类文件使用的库类.如果它使用旧类库中不存在的库类,那么它将不会运行...除非您可以包含一个反向移植类2的JAR .您可以使用-bootclasspath选项根据旧版Java的API编译代码来避免此问题.
字节码是否依赖于它创建的java版本?
是的,模数以上几点.
1 - Java的8 JVMS状态这一点:"在JDK版本Oracle的Java虚拟机实现1.0.2支持类文件格式版本45.0通过45.3.包容性的JDK发布1.1.*范围内的支持类文件格式版本45.0通过45.65535包容性对于k≥2,JDK版本.1.k支持类文件格式版本范围内45.0通过44+k.0包容性".
2 - 后退也可能有问题.例如:1)依赖本机代码支持的东西很可能需要您实现本机代码支持.2)当您在较旧的JVM上运行代码时,您很可能需要将任何后端JAR文件放入bootclasspath .
And*_*son 10
字节码是否依赖于它创建的java版本?
通常是的.但是通过使用-source,-target 和-bootclasspath选项,可以使用1.7+编译器来创建与Java 1.1兼容的二进制文件
| 归档时间: |
|
| 查看次数: |
17262 次 |
| 最近记录: |