与非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示例:
- 在Java中,JIT在JVM(Java虚拟机)中
- 在C#中,它在CLR(公共语言运行时)中
- 在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编译器重新编译了该代码,它通常会在计算机中更快地运行。
实时编译器随虚拟机一起提供,可以选择使用。 它将字节码编译为立即执行的平台特定的可执行代码。
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3159775