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技术可以接近以前纯编译技术。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

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

JIT(just-in-time) 即时编译

JIT 简介JIT 是 just in time 的缩写, 也就是即时编译编译器。使用即时编译器技术,能够加速 Java 程序的执行速度。Java通常通过 javac 将程序源代码编译转换成 Clas...

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

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

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

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

JIT(即时编译)

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

C#JIT的编译原理

  • 2015-11-14 20:08
  • 1.41MB
  • 下载

Dalvik的JIT编译流程 & ART的dex2oat流程

一.Dalvik的JIT编译流程 Dalvik JIT是一个tracing JIT(也叫trace-based JIT),其中间表示分为两种,MIR与LIR。MIR与LIR节点各自形成链表,分别被组...

.NET中的实时编译(JIT)和预编译方式

JIT(Just In Time),这是我们通过.net编译器生成的应用程序最终面向机器的编译器,因此大家对JIT了解一下其工作原理还是很有必要的。最近研究了一下,参考了很多文章,也在msdn上查了些...

深入Java虚拟机:Javac编译与JIT编译

编译过程     不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行:          ...

深入java虚拟机(七)--Javac编译与JIT编译

编译过程     不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行:          其中绿...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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