java中的编译器是什么,java – JVM中的JIT编译器究竟是什么?

我试图理解Java源代码是如何执行的,我对JVM内部的JIT编译器实际上是什么感到困惑.首先,让我告诉您我是如何理解从Java源代码到在计算机上执行机器代码的过程.也许,我误解了导致混乱的过程中的某些事情.

步骤:

>源代码被编译成字节码(.class文件)

>类文件被加载到JVM(在RAM中)

>验证字节码,然后由JIT编译器处理

> JIT编译器的输出是准备好执行的机器代码

现在,根据Wikipedia article on JVM,更具体地说是“字节码解释器和即时编译器”部分,为了执行Java字节码,您需要一个解释器(但我们有一个JIT编译器).

现在这里有点困惑我.我把它分成了引号:

“当解释器执行Java字节码时,执行总是比编译成本机机器语言的同一程序的执行慢.”

>由于计算机只能执行机器代码,并且解释器在将字节码转换为机器代码方面比编译器慢,为什么JVM使用解释器而不是编译器?

>为什么我们没有为JIT编译器为CPU生成另一个中间可执行文件,以便它可以快速执行指令?

“JIT编译器可以在执行程序时将Java字节码转换为本机机器语言.然后,程序的翻译部分可以比它们解释的更快地执行.这种技术可以应用于经常执行的程序的那些部分.”

JIT编译器真的是一个能够编译频繁执行的代码的解释器吗?编译器和解释器这两个术语是否可以互换使用?

提前致谢.

最佳答案:

Since the computer can only execute machine code, and an interpreter is slower at translating the bytecode to machine code than a compiler is, why does the JVM use an interpreter and not a compiler?

因为编译到机器代码也需要时间,特别是当它必须分析代码以优化它时,所以解释很快就足以执行大部分时间,并且实际上比编译运行更快,如果只运行一次/一次.

此外,解释器不会“将字节码转换为机器代码”.它评估字节码并执行字节码所请求的操作.解释器本身是机器代码,但它不转换字节码,它解释/评估字节码.

Why do we not have another intermediate executable file generated by the JIT compiler for the CPU so it can quickly execute the instructions?

这将违反Java的Write Once,Run Anywhere范例.

Is the JIT compiler really an interpreter that has the ability to compile frequently executed code?

不,JIT编译器(或更准确地说,HotSpot编译器,如mentioned by EJP)是由JVM根据需要执行的编译器.

Are the terms compiler and interpreter wrongfully used interchangeably?

正确.它们不能互换使用,因为它们不会做同样的事情.解释器执行字节码. JIT / HotSpot编译器将字节码转换为机器码,但不运行它.

标签:java,jvm

来源: https://codeday.me/bug/20190516/1114448.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值