有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

汇编什么解释Java的字节码

我想知道Java get是否已组装,在我的阅读资料中,我发现编译器创建字节码,然后在Java虚拟机上运行。JVM是否解释并执行字节码

这就是我困惑的原因。今天,教授在课堂上说:“编译器使用高级语言,创建汇编语言,然后汇编程序使用汇编语言,创建可以运行的机器语言(二进制)”。那么,如果Java编译成字节码,它如何运行呢


共 (4) 个答案

  1. # 1 楼答案

    只是一个说明: 在java中被称为“字节码”的东西在您最初的描述中是“创建可以运行的机器语言(二进制)”

    因此,如何运行java字节码的答案是: 您构建了一个能够处理java字节码的处理器,就像您想要执行普通的x86代码一样,您构建了一个cpu来处理它

    Java的二进制机器语言与其他CPU(如x86或powerpc)的二进制指令格式并没有什么不同。而且确实存在可以直接执行java字节码的CPU。(这将是一个普通的Intel/Amd cpu)

    另一个例子:如何在普通intel cpu上运行powerpc代码?您将构建一个软件,在运行时将powerpc二进制代码转换为x86代码。java的情况其实并没有那么不同。因此,要在x86 cpu上运行java代码,您需要一个将java二进制代码(也称为字节码)转换为x86二进制代码的程序。这就是jvm*所做的。它要么一次解释一条java指令,要么一次翻译一大块指令(称为jit)。jvm处理转换的确切方式取决于您使用的jvm实现及其设置。(java JVM有多个独立的实现,它们以不同的方式实现它们的转换)

    但是有一件事让java有点不同。与其他二进制指令格式(如x86)不同,java是较新的指令格式,它实际上是设计为直接在cpu上运行的。它的二进制格式的设计使得它可以轻松地转换为“普通”CPU(如x86或powerpc)的二进制代码

    *jvm实际上处理的不仅仅是将java二进制代码转换为依赖于处理器的代码。它还处理java程序的内存分配,并处理java程序与用户操作系统之间的通信。这样做是为了使java程序相对独立于用户操作系统和平台细节

  2. # 2 楼答案

    简而言之:JVM将Java字节码转换为特定于机器的代码。生成的特定于机器的代码随后由机器执行

    Java编译器将Java翻译成字节码。JVM在运行时将字节码转换为程序集(特定于机器的代码)。机器执行装配

  3. # 3 楼答案

    将字节码视为JVM的机器语言。(编译器不必生成必须汇编的汇编代码,但这样编写起来要容易得多。)

  4. # 4 楼答案

    有一个标准的编译器设置,比如C语言,然后是Java,这是非常不同的

    标准C编译器(通过几个内部阶段)编译成“机器指令”,x86处理器或其他任何处理器可以直接理解这些指令

    另一方面,Java编译器编译成有时被称为“字节码”的代码。这些是机器指令,但对于一个虚构的机器,Java虚拟机。所以JVM解释字节码就像“真正的”机器处理它的机器指令一样。(这样做的主要优点是编译成字节码的程序将在任何JVM上运行,无论是在x86系统、IBM RISC机箱还是Android中的ARM处理器上——只要有JVM,代码就会运行。)

    (历史上有许多类似于Java的“虚拟机”,UCSD Pascal“p-code”系统是比较成功的系统之一。)

    但它变得更复杂了--

    解释“字节码”是相当缓慢和低效的,因此大多数Java实现都有某种方案将字节码翻译成“真正的”机器指令。在某些情况下,这是在单独的编译步骤中静态完成的,但大多数情况下,这是通过“实时编译器”(JITC)完成的,该编译器在应用程序运行时将字节码的一小部分转换为机器指令。这些都变得相当复杂,有复杂的方案来决定哪些代码段将从翻译成硬件机器指令中获益最大。但在大多数情况下,它们都发挥了神奇的作用,您无需知道发生了什么,也无需编译Java代码以针对特定类型的处理器