程序执行的步骤

时间:2016-11-04 16:15:11

标签: java bytecode machine-code

经过几个小时的研究后,我没有为我的问题找到了具体的答案,我正在疯狂!:

从编辑到执行的步骤:

1。 (编译步骤)编写源代码后,编译程序。在此步骤中,它将转换为字节码。生成java.class文件(字节码)。

2.(执行步骤)现在我执行程序。

  1. (解释步骤)当我这样做时,JVM将字节码解释为机器码。所以我明白机器代码只是在执行后生成的!
  2. 现在的步骤是:代码 - >字节码 - >执行 - >机器代码

    所有这些步骤都与硬件和软件无关。 我是对的吗?

    这称为JIT(恰好是编译),因此当我执行程序时,字节码被编译成机器码,然后才编译。 那么为什么这一步称为解释?

    我提前感谢你的答案!

2 个答案:

答案 0 :(得分:5)

简而言之,因为JVM没有拥有来拥有JIT。它可以解释字节码而不是编译它。当然,仅解释JVM会很慢,但JIT部分只是提高性能的额外功能,而不是Java虚拟机的必需属性。 -Xint命令行参数可用于以仅解释模式运行java程序。

它被编译为字节码而不是机器代码的原因是为了获得平台独立性。字节码独立于平台,因此相同的代码可以在任何平台上运行(只要有JVM就可以解释它)。如果它被编译成机器代码,那将依赖于操作系统和处理器体系结构。

答案 1 :(得分:2)

  
      
  1. (解释步骤)当我这样做时,JVM将字节码解释为机器码。所以我明白机器代码只能在执行后生成!??
  2.   

不完全,没有。严格操作为字节码解释器的JVM不会将字节码转换为机器码,然后执行该操作。由这样的JVM执行的机器代码由(包括)JVM本身的预先存在的机器代码。字节代码用于提供操作的一些数据,并指示执行JVM机器代码的

  

现在的步骤是:代码 - >字节码 - >执行 - >机器代码

     

所有这些步骤都与硬件和软件无关。我是对的吗?

不,一点也不。 Java代码的细节 - >字节码转换在某种程度上取决于您使用的Java编译器(软件)。您使用的Java虚拟机必须特定于运行它的硬件,它本身就是一个软件。此外,操作环境受到许多其他软件的影响。

Java硬件独立性(例如它)意味着Java程序(字节码)在任何硬件上都会表现一致,但是在任何给定机器上如何提供这种一致行为的细节都是各种硬件和软件 - 依赖

  

这称为JIT(只是及时编译),因此当我执行程序时,字节码被编译成机器码,然后才编译。但为什么这一步称为解释?

JIT是另一回事,执行JIT的JVM(实际上大部分都是这样)并不是严格意义上的解释器。大多数此类JVM以解释方式运行一些字节码,如上所述,但是将一些字节码编译为本机(机器)代码,并在随后需要时直接运行该机器代码。后一种执行方式一般不是称为“解释”。