Java Mac和Windows上的字节码

Java Mac和Windows上的字节码,java,bytecode,Java,Bytecode,我刚刚在mac上编译了helloworld程序,从jvm生成的字节码与从windows jvm生成的字节码完全不同。我认为无论在哪个操作系统上编译java程序,jvm都会生成相同的字节码,因为java以其字节码的平台独立性而闻名。 请解释生成的字节码取决于您使用的java编译器的版本 我认为无论在哪个操作系统上编译java程序,jvm都会生成相同的字节码,因为java以其字节码的平台独立性而闻名 没有 平台独立性“保证”是字节码将在任何兼容的Java平台上运行 如果您使用Java8JDK编译J

我刚刚在mac上编译了helloworld程序,从jvm生成的字节码与从windows jvm生成的字节码完全不同。我认为无论在哪个操作系统上编译java程序,jvm都会生成相同的字节码,因为java以其字节码的平台独立性而闻名。
请解释生成的字节码取决于您使用的
java
编译器的版本

我认为无论在哪个操作系统上编译java程序,jvm都会生成相同的字节码,因为java以其字节码的平台独立性而闻名

没有

平台独立性“保证”是字节码将在任何兼容的Java平台上运行

  • 如果您使用Java8JDK编译Java代码,并尝试在Java7JRE上运行,那么它很可能无法工作

  • 即使您使用相同的编译器在同一平台上编译,“.class”文件可能包含不同编译之间不同的时间戳和源代码路径名。。。。相同的源代码


但另一方面,如果我使用EclipseJava8编译器编译并指定Java7作为目标版本。。。我没有使用任何Java8特定的语言特性或API。。。那么我的“.class”文件应该在任何Java 7、Java 8或Java 9 JRE上运行。

生成的字节码将取决于您使用的
Java
编译器的版本

我认为无论在哪个操作系统上编译java程序,jvm都会生成相同的字节码,因为java以其字节码的平台独立性而闻名

没有

平台独立性“保证”是字节码将在任何兼容的Java平台上运行

  • 如果您使用Java8JDK编译Java代码,并尝试在Java7JRE上运行,那么它很可能无法工作

  • 即使您使用相同的编译器在同一平台上编译,“.class”文件可能包含不同编译之间不同的时间戳和源代码路径名。。。。相同的源代码


但另一方面,如果我使用EclipseJava8编译器编译并指定Java7作为目标版本。。。我没有使用任何Java8特定的语言特性或API。。。那么我的“.class”文件应该在任何Java 7、Java 8或Java 9 JRE上运行。

否。Java以能够运行任何操作系统而闻名。现在,我已经说过,同一版本的
javac
为同一个代码生成的“完全不同”字节码让我感到惊讶-您介意发布两个平台的特定代码和生成的字节码吗?(如果它相当短,也就是说)您是否尝试在单个平台上运行这两个bytcodes?“完全不同”,根据哪种比较方法?@boristesspider
javac
AFAIK不考虑它编译的操作系统,运行时将在运行时考虑这一点。这将是非常令人惊讶的。Java以能够运行任何操作系统而闻名。现在,我已经说过,同一版本的
javac
为同一个代码生成的“完全不同”字节码让我感到惊讶-您介意发布两个平台的特定代码和生成的字节码吗?(如果它相当短,也就是说)您是否尝试在单个平台上运行这两个bytcodes?“完全不同”,根据哪种比较方法?@boristesspider
javac
AFAIK不考虑它编译的操作系统,运行时将在运行时考虑这一点。这确实令人非常惊讶