使用OpenJDK编译的java代码是否总是在Oracle的Hotspot上运行,反之亦然?

Ama*_*ora 1 java openjdk jvm javac

我来到这个文档,其中相同的Java代码在Oracle JDK中编译,但在OpenJDK上编译.SO上也提到了一些针对相同问题的参考文献.这是否意味着"javac"特定于供应商?

如果答案是肯定的?然后他们有可能产生不同的字节码.请参考这里.

因此,如果字节码不同,Oracle的JVM将如何处理OpenJDK的javac生成的字节码?

是否安全地说:"Java是"一次写入并在任何地方运行,只要javac编译器和JVM来自同一个供应商?"

Pet*_*rey 6

javac不是供应商特定的,但不同的编译器可能有不同的错误,这可能会导致差异.

更有意义的是可用的内置库,开发人员不打算使用的esp类.例如,sun.misc.Unsafe.copyMemory(5 args)在Oracle JDK中的Java 6更新18之前不存在,并且仅在OpenJDK的上次更新中可用.AFAIK,它在IBM JVM中不可用.

Write Once,Run Anywhere意味着编译一次,在任何地方运行.例如,C++可以编写一次并在任何地方运行,只要您为每个系统重新编译它.

编译完Java代码后,它将在任何具有您使用的库的系统上运行.