即时编译

即时编译(英语: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 - 即时编译相关推荐

  1. jit即时编译_热点中的即时编译器(JIT)

    jit即时编译 即时编译器(JIT)的概念以及更广泛的自适应优化是除Java(.Net,Lua,JRuby)之外的许多语言中众所周知的概念. 为了解释什么是JIT编译器,我想先定义一个编译器概念. 根 ...

  2. (三)JVM成神路之全面详解执行引擎子系统与JIT即时编译原理

    引言 执行引擎子系统是JVM的重要组成部分之一,在JVM系列的开篇曾提到:JVM是一个架构在平台上的平台,虚拟机是一个相似于"物理机"的概念,与物理机一样,都具备代码执行的能力.但 ...

  3. 【Flutter】Dart 语言 ( Dart 语言特征 | JIT 即时编译 | AOT 静态编译 )

    文章目录 I . Dart 语言特征 II . JIT 即时编译 III . AOT 静态编译 I . Dart 语言特征 1 . Dart 语言特征 : ① 语言类型 : 强类型语言 ; ② 编译类 ...

  4. JVM 虚拟机 AOT 和 JIT 即时编译

    文章目录 JVM 虚拟机 AOT 和 JIT 即时编译 1.AOT 2.JIT JVM 虚拟机 AOT 和 JIT 即时编译 1.AOT AOT 是 Ahead Of Time ,运行前编译 与 JI ...

  5. JIT 即时编译及优化技术

    JIT 即时编译及优化技术 前言 即时编译 热点代码探测 编译优化技术 语言无关的经典优化技术之一:公共子表达式消除 语言相关的经典优化技术之一:数组范围检查消除 最重要的优化技术之一:方法内联 最前 ...

  6. JVM成神路之全面详解执行引擎子系统、JIT即时编译原理与分派实现

    引言 执行引擎子系统是JVM的重要组成部分之一,在JVM系列的开篇曾提到:JVM是一个架构在平台上的平台,虚拟机是一个相似于"物理机"的概念,与物理机一样,都具备代码执行的能力.但 ...

  7. javac参数 编译警告关闭_JVM之JIT即时编译

    当今Java语言被广为接受的优点之一就有即时编译,即时编译的存在使得Java应用可以运行时间的增长而获得更高的性能. 如果有对jvm做过研究的朋友,一定听说过这样一段话:由于即时编译技术的进步,尤其是 ...

  8. JVM(1)之JVM的组成详解(字符串常量池+双亲委派机制+JIT即时编译......)

    以下总结自:<深入理解java虚拟机> + 宋红康老师视频 字节码文件介绍:深入理解JVM之Java字节码(.class)文件详解_Windy_729的博客-CSDN博客_字节码文件 JV ...

  9. 深入了解PHP8 JIT(即时编译)功能

    (Just-In-Time)即时编译器是PHP 8.0中最重要的新功能之一.JIT可以通过将PHP应用程序的全部或经常调用的部分作为CPU机器代码编译并存储并直接执行,从而绕过Zend VM及其过程开 ...

最新文章

  1. 一张图解析如何让img垂直居中对齐
  2. 关于 微软必应词典客户端(pc) 的案例分析
  3. 谈谈程序链接及分段那些事
  4. java内存分析_java内存分析总结
  5. 蓝桥杯物联网例程下载
  6. 《画解算法》1.两数之和【python实现】
  7. bootstrap 简介
  8. 苹果电脑裸机和不裸机的区别_将Kubernetes带到裸机边缘
  9. Eclipse-project 重命名问题(如何彻底修改Eclipse工程名),4种解法
  10. jquery学习之1.19-小练习3-输入用户名密码时焦点触发和失去焦点
  11. 操作系统课程设计之二级文件系统演示
  12. 倒计时电路multisim10s_multisim10秒倒计时器
  13. 服务器主板维修教学视频,第60讲 超微服务器主板远程管理讲解与演示
  14. 基于vue的后台管理系统开发
  15. 北京大学计算机学院刘利,信息科学学院 科研动态 深化新文科计算机教学改革,实施分类分层次教学体系研讨会在京召开...
  16. C语言------冲突声明(conflicting declaration)
  17. arduino 嗡鸣器 音乐_arduino笔记一:用arduino实现蜂鸣器播放音乐
  18. 大数据在医疗领域的应用
  19. 可并堆(左高树、左偏树)
  20. python数据分析案例2-1:Python练习-Python爬虫框架Scrapy入门与实践

热门文章

  1. 灰度、灰度级、分辨率、像素值等一些系列基本概念(转)
  2. 线程函数参数(LPVOID Param)
  3. 深信服——字符串模糊匹配
  4. 微信小程序页面间传值
  5. 2018年 团体程序设计天梯赛——题解集
  6. vw8000_汽车电子国际测试标准iso16750和VW8000
  7. 解决IDEA gradle build失败方法
  8. python显示磁共振图像(MRI)(pydicom)
  9. BIOS IDE 改 AHCI
  10. 时序数据库与传统数据库的优势