什么解释Java的字节码

3 java assembly

我想知道Java是否已经组装好,在我的读数中,我发现编译器创建了字节码,然后在Java虚拟机上运行.JVM是否解释字节代码并执行它?

这就是为什么我很困惑.今天在课堂上,教授说"编译器采用高级语言,创建汇编语言,然后汇编器采用汇编语言并创建可以运行的机器语言(二进制)".因此,如果Java编译为字节码,它如何运行?

Hot*_*cks 9

有一个标准的编译器设置,例如用于C语言,然后有Java,这是显着不同的.

标准C编译器将(通过几个内部阶段)编译成"机器指令",这些指令可由x86处理器或其他任何东西直接理解.

另一方面,Java编译器编译为有时称为"字节码"的东西.这些是机器指令,但对于虚构的机器,Java虚拟机.因此,JVM解释字节码就像"真正的"机器处理它的机器指令一样.(这样做的主要优点是编译成字节码的程序可以在任何 JVM 上运行,无论是在x86系统,IBM RISC盒还是Android中的ARM处理器上 - 只要有一个JVM,代码就会跑.)

(历史上有许多类似于Java的"虚拟机",UCSD Pascal"P-code"系统是其中一个比较成功的系统.)

但它变得更加复杂 -

解释"字节码"是相当慢和低效的,因此大多数Java实现都有某种方案将字节码转换为"真正的"机器指令.在某些情况下,这是在一个单独的编译步骤中静态完成的,但最常见的是使用"即时编译器"(JITC),它在应用程序运行时将小部分字节码转换为机器指令.这些变得非常复杂,使用复杂的方案来决定哪些代码段将从转换为硬件机器指令中获益最多.但是,在大多数情况下,它们都可以实现它们的魔力而无需了解正在发生的事情,也无需编译Java代码来定位特定类型的处理器.