与非JIT编译器相比,JIT编译器具体做什么?有人能给出简洁易懂的描述吗?
当前回答
JIT代表Just-in-Time,这意味着代码在需要时才编译,而不是在运行时之前。
这是有益的,因为编译器可以生成针对特定机器优化的代码。静态编译器,就像普通的C编译器一样,将所有代码编译为开发人员机器上的可执行代码。因此,编译器将基于一些假设执行优化。它可以编译得更慢,做更多的优化,因为它不会降低用户执行程序的速度。
其他回答
正如其他人提到的
JIT代表Just-in-Time,这意味着代码在需要时才编译,而不是在运行时之前。
为了给上面的讨论补充一点,JVM维护一个函数执行时间的计数。如果该计数超过预定义的限制,JIT将代码编译为处理器可以直接执行的机器语言(不像一般情况下,javac将代码编译为字节码,然后java -解释器逐行解释这个字节码,将其转换为机器代码并执行)。
另外,下次计算此函数时,将再次执行相同的编译代码,而不像常规解释那样逐行重新解释代码。这使得执行速度更快。
Just In Time编译器也称为JIT编译器 Java的性能改进。默认启用。它是 编译在执行时完成。 Java通过将JIT编译器包含在 JVM。
jit——来得正是时候 这个词本身就表示需要的时候(按需)
典型场景:
源代码完全转换为机器代码
JIT的场景:
源代码将转换为汇编语言,如结构[为ex IL(中间语言)为c#,字节码为java]。
中间代码仅在应用程序需要时才转换为机器语言,所需代码仅转换为机器代码。
JIT与非JIT的比较:
在JIT中,并不是所有的代码都先转换成机器码 所有必要的代码都将被转换成机器代码 如果调用的方法或功能不在机器中,那么 将被转换成机器代码…减少CPU的负担。 因为机器代码将在运行时....上生成JIT 编译器将生成优化运行的机器代码 机器的CPU架构。
JIT的例子:
在Java中,JIT是在JVM (Java虚拟机)中 在c#中,它是在CLR(公共语言运行库)中 在Android中,它是在DVM (Dalvik Virtual Machine)中,或者在更新的版本中是ART (Android RunTime)。
20%的字节码在80%的时间内被使用。JIT编译器获得这些统计数据,并优化这20%的字节代码,通过添加内联方法、删除未使用的锁等,并创建特定于这台机器的字节码来更快地运行。我引用这篇文章,我发现它很方便。http://java.dzone.com/articles/just-time-compiler-jit-hotspot
在Java编译器生成字节代码(与体系结构无关)之后,执行将由JVM(在Java中)处理。字节代码将由加载器加载到JVM中,然后解释每个字节指令。
当我们需要多次调用一个方法时,我们需要多次解释相同的代码,这可能会花费更多的时间。所以我们有了JIT(即时)编译器。当字节被加载到JVM(它的运行时)中时,整个代码将被编译而不是解释,从而节省时间。
JIT编译器只在运行时工作,所以我们没有任何二进制输出。
推荐文章
- Go是如何编译得这么快的?
- 编译警告:对于架构i386,没有处理文件的规则
- LL和LR解析之间的区别是什么?
- 为什么Java在连续整数上的切换与添加的情况下运行得更快?
- Clang vs GCC——哪个生成更快的二进制文件?
- __PRETTY_FUNCTION__, __FUNCTION__, __func__之间的区别是什么?
- 为什么编译Python代码?
- 显示构建日期
- 编译语言与解释语言
- 为什么要用C语言链接数学库?
- 如何防止较少试图编译CSS calc()属性?
- 错误:java:无效的源代码发布:8 Intellij。这是什么意思?
- .NET 3.5 JIT在运行应用程序时无法工作
- Java JIT在运行JDK代码时会作弊吗?
- 如何检查Python脚本的语法而不执行它?