即时(JIT)编译器有什么作用?

ぃ、小莉子 提交于 2020-02-27 12:40:01

与非JIT编译器相比,JIT编译器专门做什么? 有人可以给出简洁明了的描述吗?


#1楼

Java编译器生成字节代码(与体系结构无关)后,执行将由JVM(在Java中)处理。 字节码将由加载程序加载到JVM中,然后解释每个字节指令。

当我们需要多次调用一个方法时,我们需要多次解释相同的代码,这可能比需要花费更多的时间。 因此,我们有了JIT(即时)编译器。 将字节加载到JVM(运行时)后,整个代码将被编译而不是解释,从而节省了时间。

JIT编译器仅在运行时起作用,因此我们没有任何二进制输出。


#2楼

JIT-及时,单词本身说出何时需要(按需)

典型场景:

源代码已完全转换为机器代码

JIT场景:

源代码将转换为汇编语言,例如结构[对于C#来说,是用于ex IL(中间语言),对于Java,是ByteCode)。

仅当应用程序需要的中间代码仅转换为机器代码时,才将中间代码转换为机器语言。

JIT与非JIT比较:

  • 在JIT中,并非所有代码都首先转换为机器代码,一部分必需的代码将被转换为机器代码,然后,如果所调用的方法或功能不在机器中,则将其转换为机器代码...它减少了CPU的负担。

  • 由于机器代码将在运行时生成...。JIT编译器将生成针对机器的CPU体系结构进行了优化的机器代码。

JIT示例:

  1. 在Java中,JIT在JVM(Java虚拟机)中
  2. 在C#中,它在CLR(公共语言运行时)中
  3. 在Android中,它是DVM(Dalvik虚拟机)或更高版本的ART(Android运行时)。

#3楼

正如其他提到的

JIT代表即时(Just-in-Time),这意味着代码将在需要时(而不是在运行时之前)进行编译。

只是在上面的讨论中增加了一点,JVM维护着一个函数执行多少次的计数。 如果此计数超过预定义的限制,那么JIT会将代码编译为机器语言,该语言可以直接由处理器执行(不同于正常情况下,javac将该代码编译为字节码,然后再用java-解释器逐行解释此字节码,将其转换为机器代码并执行)。

同样,下次计算此函数时,将再次执行相同的编译代码,这与常规解释不同,在常规解释中,逐行代码被再次解释。 这使执行速度更快。


#4楼

我知道这是一个旧线程,但是运行时优化是JIT编译的另一个重要部分,在这里似乎没有进行讨论。 基本上,JIT编译器可以在程序运行时对其进行监视,以确定提高执行效率的方法。 然后,它可以在运行时即时进行这些更改。 Google JIT优化(javaworld上有一篇很好的文章。


#5楼

Jit表示即时编译器jit是将Java字节码转换为可以直接发送到处理器的指令的程序。

在特定的系统平台上使用Java即时编译器(实际上是第二个编译器)将字节码编译为特定的系统代码,一旦jit编译器重新编译了该代码,它通常会在计算机中更快地运行。

实时编译器随虚拟机一起提供,可以选择使用。 它将字节码编译为立即执行的平台特定的可执行代码。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!