JIT:Just-in-time compilation,即时编译;AOT:Ahead-of-time compilation,事前编译。

JVM即时编译(JIT)

1. 动态编译与静态编译

  • 动态编译(dynamic compilation)指的是“在运行时进行编译”;与之相对的是事前编译(ahead-of-time compilation,简称AOT),也叫静态编译(static compilation)。

  • JIT 编译狭义来说是当某段代码即将第一次被执行时进行编译,因而叫“即时编译”,JIT 编译是动态编译的一种特例。JIT编译一词后来被泛化,时常与动态编译等价;但要注意广义与狭义的JIT编译所指的区别。

  • 自适应动态编译(adaptive dynamic compilation)也是一种动态编译,但它通常执行的时机比 JIT 编译迟,先让程序“以某种式”先运行起来,收集一些信息之后再做动态编译。这样的编译可以更加优化。

2. JVM 运行原理

在部分商用虚拟机中(如 HotSpot),Java 程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler,下文统称JIT编译器)。

即时编译器并不是虚拟机必须的部分,Java虚拟机规范并没有规定Java虚拟机内必须要有即时编译器存在,更没有限定或指导即时编译器应该如何去实现。但是,即时编译器编译性能的好坏、代码优化程度的高低却是衡量一款商用虚拟机优秀与否的最关键的指标之一,它也是虚拟机中最核心且最能体现虚拟机技术水平的部分。

由于Java虚拟机规范并没有具体的约束规则去限制即使编译器应该如何实现,所以这部分功能完全是与虚拟机具体实现相关的内容,如无特殊说明,我们提到的编译器、即时编译器都是指 Hotspot 虚拟机内的即时编译器,虚拟机也是特指 HotSpot 虚拟机。

最新文章

  1. 【Machine Learning】Python开发工具:Anaconda+Sublime
  2. 【Alpha阶段】第二次Scrum例会
  3. yii 自定义组件的调用
  4. 【BZOJ】1407 NOI 2002 荒岛野人Savage
  5. bfs 胜利大逃亡
  6. Struts2应用的开发步骤
  7. cscope 的使用
  8. linux中利用iptables+geoip过滤指定IP
  9. 1930. Ivan's Car(spfa)
  10. hdu1792 水题
  11. 上海及周边地区产品技术创业QQ群:98905958
  12. 如何优雅的研究 RGSS3 (七) 加入LOGO屏幕
  13. 分布式Ruby解决之道
  14. Office组件无法正常使用的解决方法
  15. Kubernetes---存储
  16. PS绘制飘逸彩色丝带教程
  17. linux下gzip的压缩详解
  18. 转一篇用分布式解决ERP问题
  19. 有关onpropertychange事件
  20. Linux内核同步 - 原子操作

热门文章

  1. Oracle 排序问题(null带来的)
  2. Android滑动到顶部悬停
  3. MVC中url路由规则
  4. (转)Windows2008优化IIS7.5支持10万个同时请求的配置方法
  5. ITFriend开发日志20140611
  6. POJ 2642 The Brick Stops Here 0-1背包
  7. Web前端--黑客技术揭秘(菜鸟知识)
  8. 洛谷 P4013 数字梯形问题
  9. 网站访问优化(二):开启apache服务器gzip压缩
  10. JDBC之一:JDBC快速入门 分类: B1_JAVA 2014-02-19 14:49 745人阅读 评论(0) 收藏