Ama*_*ora 1 java openjdk jvm javac
我来到这个文档,其中相同的Java代码在Oracle JDK中编译,但在OpenJDK上编译.SO上也提到了一些针对相同问题的参考文献.这是否意味着"javac"特定于供应商?
如果答案是肯定的?然后他们有可能产生不同的字节码.请参考这里.
因此,如果字节码不同,Oracle的JVM将如何处理OpenJDK的javac生成的字节码?
是否安全地说:"Java是"一次写入并在任何地方运行,只要javac编译器和JVM来自同一个供应商?"
这javac不是供应商特定的,但不同的编译器可能有不同的错误,这可能会导致差异.
更有意义的是可用的内置库,开发人员不打算使用的esp类.例如,sun.misc.Unsafe.copyMemory(5 args)在Oracle JDK中的Java 6更新18之前不存在,并且仅在OpenJDK的上次更新中可用.AFAIK,它在IBM JVM中不可用.
Write Once,Run Anywhere意味着编译一次,在任何地方运行.例如,C++可以编写一次并在任何地方运行,只要您为每个系统重新编译它.
编译完Java代码后,它将在任何具有您使用的库的系统上运行.