读书人

学习JVM原理-17.初期编译与运行时JIT编

发布时间: 2012-10-13 11:38:17 作者: rapoo

学习JVM原理-17.早期编译与运行时JIT编译
摘自《深入理解Java虚拟机》周志明著

虽有那种直接把*.java变成本地执行代码的编译器,但java的编译方式主要有两种:

1. 前期编译:即SUN的javac, 把java编译成字节码; 运行时由解释器解释执行
2. 运行时编译:JIT(Just in Time)编译器,运行时把Hot Spot(经常访问的代码)编译成本地代码执行(注意,JIT并不是JVM规范,有的JVM实现里没有JIT)


Java程序运行时就是 解释器 + JIT编译器 一起工作(你可以用-Xint禁止编译器)。解释器发现HotSpot后,如果已有对应的本地代码,就会让JIT执行这段代码;否则,会一边让JIT在后台编译,一边自己解释执行。有时JIT如果发现自己不能够执行本地代码,也会把任务交给解释器


另外,两种编译器都会做些优化动作:
1.javac: 一个例子就是解除泛型这个语法糖,因为字节码是不认泛型的,List<String>在字节码里的类型就是List
2.JIT: 比如内联

读书人网 >编程

热点推荐