与非JIT编译器相比,JIT编译器具体做什么?有人能给出简洁易懂的描述吗?
当前回答
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文档以了解更多信息。
其他回答
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)。
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文档以了解更多信息。
非jit编译器获取源代码,并在编译时将其转换为特定于机器的字节代码。JIT编译器获取编译时生成的与机器无关的字节代码,并在运行时将其转换为特定于机器的字节代码。Java使用的JIT编译器允许一个二进制文件无需修改就能在多种平台上运行。
在Java编译器生成字节代码(与体系结构无关)之后,执行将由JVM(在Java中)处理。字节代码将由加载器加载到JVM中,然后解释每个字节指令。
当我们需要多次调用一个方法时,我们需要多次解释相同的代码,这可能会花费更多的时间。所以我们有了JIT(即时)编译器。当字节被加载到JVM(它的运行时)中时,整个代码将被编译而不是解释,从而节省时间。
JIT编译器只在运行时工作,所以我们没有任何二进制输出。
Just In Time编译器也称为JIT编译器 Java的性能改进。默认启用。它是 编译在执行时完成。 Java通过将JIT编译器包含在 JVM。
推荐文章
- 警告:API ' variable . getjavacompile()'已过时,已被' variable . getjavacompileprovider()'取代
- 阅读GHC核心
- 解析.py文件,读取AST,修改它,然后写回修改后的源代码
- 是否可以动态编译和执行c#代码片段?
- 为什么Java类的编译与空行不同?
- 如何使用cmake创建共享库?
- 在C和c++中静态变量存储在哪里?
- 无法加载文件或程序集…参数不正确
- 如果使用if-return-return或if-else-return?
- Java是编译型编程语言还是解释型编程语言?
- 为什么Swift的编译时间这么慢?
- 选项(RECOMPILE)总是更快;为什么?
- 如何在Angular 2.0中使用/创建动态模板来编译动态组件?
- 如何修复从源代码安装PHP时未发现xml2-config的错误?
- 用自己的语言编写编译器