字节码是否必须转换为机器码?

时间:2017-05-25 06:56:32

标签: java jvm

我对JVM的角色感到困惑。我的理解是正确的,JVM只将字节码转换为机器代码吗?因此,OS,JVM和CPU之间基本上存在通信。我的假设是字节码转换为机器码然后由CPU处理。

2 个答案:

答案 0 :(得分:0)

JVM是一个虚拟机。

就像在VMware或VirtualBox上安装某些操作系统(Linux,Solaris)时那样,它们就是虚拟机。它们运行在主机操作系统之上。

JVM的不同之处在于它的机器代码为bytecode。有些机器具有高级语言作为其机器代码。如果JVM要在硬件上而不是在主机操作系统上运行,那么它会期望硬件能够使用bytecode指令集。

然而,由于它在主机OS之上运行,因此任何字节码指令在转换为机器代码后都会传送给主机。对于VMware / VirtualBox,这些软件会处理它。对于JVM,它由JRE完成。

答案 1 :(得分:0)

JAVA是一种编译和解释语言,而不仅仅是解释语言。让我们看一步一步执行它的程序。

  1. 假设我们编写一个java程序并将其保存为硬盘上某个文件夹中的“hello.java”。
  2. java编译器的名称是“javac”。对于它的编译,我们必须在命令行上编写“javac hello.java”。
  3. 在此阶段,高级代码将转换为机器级代码。 Java将其转换为.class文件为“hello.class”。此代码也称为字节代码,因为此文件中的每条指令都是1字节。
  4. 此字节代码也可以在任何其他平台上删除 Mac,Linux或Windows。它只需要一个相应操作系统的JVM 执行。因此,JAVA被称为第一个独立的平台 建筑中立的语言。
  5. 现在,为了执行它,使用了解释器。它被命名为“java”本身。对于它的解释,应该在命令行上使用“java hello.java”。它在内部调用类加载器,它负责将'hello.class'文件从硬盘加载到JVM的地址空间。
  6. 这里有一个'字节代码验证程序',用于验证代码以避免运行时故障。验证成功后,JVM在OS的帮助下逐字节代码执行。
  7. 因此整个java程序由JVM和OS执行。虽然JVM充当java程序的迷你操作系统,但只有当指令不在其范围内时才会涉及操作系统。