与非JIT编译器相比,JIT编译器具体做什么?有人能给出简洁易懂的描述吗?
当前回答
在Java编译器生成字节代码(与体系结构无关)之后,执行将由JVM(在Java中)处理。字节代码将由加载器加载到JVM中,然后解释每个字节指令。
当我们需要多次调用一个方法时,我们需要多次解释相同的代码,这可能会花费更多的时间。所以我们有了JIT(即时)编译器。当字节被加载到JVM(它的运行时)中时,整个代码将被编译而不是解释,从而节省时间。
JIT编译器只在运行时工作,所以我们没有任何二进制输出。
其他回答
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文档以了解更多信息。
在Java编译器生成字节代码(与体系结构无关)之后,执行将由JVM(在Java中)处理。字节代码将由加载器加载到JVM中,然后解释每个字节指令。
当我们需要多次调用一个方法时,我们需要多次解释相同的代码,这可能会花费更多的时间。所以我们有了JIT(即时)编译器。当字节被加载到JVM(它的运行时)中时,整个代码将被编译而不是解释,从而节省时间。
JIT编译器只在运行时工作,所以我们没有任何二进制输出。
JIT编译器在程序启动后运行,并实时(或称为just-in-time)将代码(通常是字节码或某种虚拟机指令)编译为通常更快的形式,通常是主机CPU的本机指令集。JIT可以访问动态运行时信息,而标准编译器不能,并且可以进行更好的优化,例如经常使用的内联函数。
这与传统的编译器相反,传统的编译器在程序第一次运行之前将所有代码编译为机器语言。
换句话说,在你第一次运行程序之前,传统的编译器会将整个程序构建为一个EXE文件。对于新样式的程序,程序集是用伪代码(p-code)生成的。只有在你在操作系统上执行程序之后(例如,通过双击它的图标),(JIT)编译器才会启动并生成基于英特尔处理器或其他能够理解的机器代码(m-code)。
Jit代表即时编译器 Jit是一个将Java字节代码转换为可以直接发送到处理器的指令的程序。
在特定的系统平台上使用java即时编译器(实际上是第二个编译器)将字节码遵从为特定的系统代码,一旦代码被jit编译器重新编译,它通常会在计算机中运行得更快。
即时编译器随虚拟机一起提供,可选使用。它将字节码编译为立即执行的特定于平台的可执行代码。
推荐文章
- 警告: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的错误?
- 用自己的语言编写编译器