据我所知,Java编译器生成的是“字节码”,而不是“目标代码”。首先,这个说法正确吗?
此外,我的书上也是这么说的,我想知道为什么这是正确的。字节码和目标代码有什么区别呢?
据我所知,Java编译器生成的是“字节码”,而不是“目标代码”。首先,这个说法正确吗?
此外,我的书上也是这么说的,我想知道为什么这是正确的。字节码和目标代码有什么区别呢?
字节码只是Java虚拟机的“目标代码”。它不是本地代码(例如x86)。老实说,我很少听到“目标代码”这个术语 - 用更具体的术语交流通常更清楚明了。
C语言目标代码是一种只有编译它的操作系统才能解释的形式。
C代码 -> C编译器(例如gcc) -> 目标代码 -> 操作系统
C编译器会为其编写的操作系统输出目标代码。如果想要在其他机器上运行C代码,就必须重新编译它。
在Windows上编译的C代码在Linux上运行时需要重新编译。
Java代码 -> Java编译器(javac) -> 字节码 -> JVM
Java编译器输出的字节码可以在其JVM上运行。操作系统的所有特殊性都被推入JVM中,从Java代码中隐藏。因此,只要操作系统有JVM,就可以在其上运行Java字节码而无需重新编译。在Windows上编译的Java代码可以在任何安装了相同版本JVM的其他操作系统上运行。
还可参考目标代码和字节码的区别
你可以把JVM看作是你的字节码的解释器。虽然从技术上讲,它被称为JIT(即时编译)。JVM是JRE(Java运行环境)的一部分,而Java程序几乎是平台无关的(任何能运行JVM的系统也能运行Java程序),但JRE中的JVM部分是平台相关的。
简短版:
由于我也刚开始学习这个东西,所以这可能不是100%准确的。但这是我对这个概念的理解。希望这有所帮助。
Java是跨平台的。当您编译Java源代码时,它会被转换为字节码,当应用程序运行时,客户端机器上的JRE执行字节码。