JIT - 即时编译

原创 2015年11月19日 01:09:46

即时编译

即时编译(英语:Just-in-time compilation),又译及时编译、实时编译[3],动态编译的一种形式,是一种提高程序运行效率的方法。通常,程序有两种运行方式:静态编译与動態直譯。静态编译的程序在执行前全部被翻译为机器码,而直譯执行的则是一句一句边运行边翻译。

即时编译器则混合了这二者,一句一句编译源代码,但是会将翻译过的代码缓存起来以降低性能损耗。相对于静态编译代码,即时编译的代码可以处理延迟绑定并增强安全性。

即时编译器有两种类型,一是字节码翻译,二是动态编译翻译。

静态编译 VS 动态编译

静态编译优化和动态编译优化最大的不同是他们在编译时所得到的信息量的不同。静态编译在运行程序之前就把所有的执行代码编译完,这时编译器所接受的编译信息量是不够多的。比如说:某个函数是否是大量地被调用了,函数的实参是不是一直是一个常数,等等。 动态编译之于静态编译,缺点是它需要即时编译代码,但是有一个优点---编译器可以获得静态编译期所没有的信息。比如:通过运行时的profiling可以知道哪些函数是被大量使用的。在哪些execution path上哪些函数的参数一直都没有变,等等。不要小看这些信息,当即时编译器了解这些信息之后可以在短时间内编译出比静态编译器更优质的二进制码。举例来说,一般程序也遵循90-10原则,即运行时的90%里计算机是在处理其中10%的代码,寻找到这些执行热点代码进行深度优化能得到比静态编译更好的性能(因为已知更多信息量)。

关于Java的JIT

Java JIT工作原理图:



工作原理:

当JIT编译启用时(默认是启用的),JVM读入.class文件解释后,将其发给JIT编译器。JIT编译器将字节码编译成本机机器代码。

通常javac将程序源代码编译转换成java字节码,JVM通过解释字节码将其翻译成对应的机器指令,逐条读入,逐条解释翻译。很显然,经过解释执行,其执行速度必然会比可执行的二进制程序慢。为了提高执行速度,引入了JIT技术。

在运行时JIT会把翻译过的机器码保存起来,以备下次使用,因此从理论上来说,采用该JIT技术可以接近以前纯编译技术。


JIT(即时编译)

    本文转自eoeandroid       最早的Java建置方案是由一套转译程式(interpreter),将每个Java指令都转译成对等的微处理器指令,并根据转译后的指令先后次序依序执行,由...

JVM即时编译(JIT)

JVM即时编译深入理解,为什么要使用即时编译,为什么不一直使用即时编译

【深入Java虚拟机】之七:Javac编译与JIT编译

如今,基于物理机、虚拟机等的语言,大多都遵循这种基于现代经典编译原理的思路,在执行前先对程序源码进行词法解析和语法解析处理,把源码转化为抽象语法树。对于一门具体语言的实现来说,词法和语法分析乃至后面的...

即时编译 理解

PyPy 用 JIT (Just-in-time compilation) 来大幅提高性能。既然这么好,为什么 CPython,Ruby 不用 JIT ?是不是 Java 这样的静态语言容易实现 JI...

【华为OJ】【104-201301JAVA题目0-1级】

【华为OJ】【算法总篇章】【华为OJ】【104-201301JAVA题目0-1级】【工程下载】题目描述编写一个函数,传入一个int型数组,返回该数组能否分成两组,使得两组中各元素加起来的和相等, 并且...

java中为什么我们要慎用递归

在平常的开发中,我们要慎用递归,一般情况下,能用递归实现的功能的,在java中都可以用其他的方式实现,那么为什么能?下面根据我在网上查询的资料,简单解释下: java的内存分配主要是由堆和栈分配,堆是...

浅析 JIT 即时编译技术

即时编译回顾 HotSpot 虚拟机执行 Java 程序时,先通过解释器对代码解释执行,发现某个方法或代码块执行比较频繁后,对热点代码进行编译,编译后生成与本地平台相关的机器码,再去执行机器码获得较...

Android安全与逆向之Dalvik虚拟机架构和如何执行程序以及JIT(即时编译)

 1、Dalvik虚拟机架构和Java虚拟机的架构不同 1、Java虚拟机基于栈结构,需要频繁从栈读取或写入数据,这个过程需要更多的指令与内存访问次数,会消耗cpu时间 2、Dalvik虚拟...

深入理解java虚拟机(十三) Java 即时编译器JIT机制以及编译优化

在部分的商用虚拟机中,Java 程序最初是通过解释器( Interpreter )进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁的时候,就会把这些代码认定为“热点代码”。为了提高热点代码的...

Java的即时编译(Just In Time, JIT)及其优化

Java程序最初是通过解释器进行解释执行的,当虚拟机发现某个方法或代码块运行的特别频繁时,会把这些代码认定为“热点代码”(Hot Spot Code)。为了提高热点代码的执行效率,在运行时,虚拟机会把...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JIT - 即时编译
举报原因:
原因补充:

(最多只允许输入30个字)