与非JIT编译器相比,JIT编译器具体做什么?有人能给出简洁易懂的描述吗?


当前回答

Just In Time编译器也称为JIT编译器 Java的性能改进。默认启用。它是 编译在执行时完成。 Java通过将JIT编译器包含在 JVM。

其他回答

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

这是有益的,因为编译器可以生成针对特定机器优化的代码。静态编译器,就像普通的C编译器一样,将所有代码编译为开发人员机器上的可执行代码。因此,编译器将基于一些假设执行优化。它可以编译得更慢,做更多的优化,因为它不会降低用户执行程序的速度。

代码被编译成某种IL(中间语言)。当你运行你的程序时,计算机不理解这段代码。它只理解本机代码。因此JIT编译器会动态地将IL编译为本地代码。它在方法级别上执行此操作。

非jit编译器获取源代码,并在编译时将其转换为特定于机器的字节代码。JIT编译器获取编译时生成的与机器无关的字节代码,并在运行时将其转换为特定于机器的字节代码。Java使用的JIT编译器允许一个二进制文件无需修改就能在多种平台上运行。

Just In Time编译器也称为JIT编译器 Java的性能改进。默认启用。它是 编译在执行时完成。 Java通过将JIT编译器包含在 JVM。

Just In Time编译器: 它将java字节码编译成特定CPU的机器指令。

例如,如果我们在java代码中有一个循环语句:

while(i<10){
    // ...
    a=a+i;
    // ...
 }

如果i的值为0,上述循环代码将运行10次。

没有必要一次又一次地编译字节码10次,因为相同的指令将执行10次。在这种情况下,只需要编译该代码一次,并且可以将值更改所需的次数。因此,Just In Time (JIT) Compiler会跟踪这些语句和方法(如上所述),并将这些字节代码片段编译为机器代码以获得更好的性能。

另一个类似的例子是在字符串/句子列表中使用“正则表达式”搜索模式。

JIT Compiler不会将所有代码编译为机器代码。它在运行时编译具有类似模式的代码。

请参阅了解JIT的Oracle文档以了解更多信息。