::我的理解
笔记
HotSpot VM, J9 VM: 这两个JVM默认用混合模式执行引擎, 以解释为基础, 然后对热点做编译;
这两者同时还支持AOT编译执行. J9 VM对AOT编译的支持早就有了; HotSpot VM的将在JDK9的某个更新版中发布, 请参考Java Goes AOT(打不开请自备工具…)
JRockit VM: 不是, JRockit VM没有解释器, 只能对所有Java方法都做JIT编译;
Jikes RVM, Maxine VM, Jato VM等: 跟JRockit类似, 只有JIT编译器而没有解释器, 因而只能JIT编译执行;
Excelsior JET: 可配置为用纯AOT编译, 或者AOT+JIT编译执行.
为什么现在都是混合模式比较多,也就是即时编译器 和解释器混合使用?我们来看下,一共有几种方案。
仅用解释器,不采用。因为解释执行,执行速度不够快,碰到热点代码不进行编译,是不合适的
仅用即时编译器,有些jvm是这么做的,但是要规避一个问题,编译是需要时间的,如何减少编译时间?即非热点代码如何执行?
- 直接不要编译时间,直接采用 解释器,即混合模式
- 采用分层级编译,根据runtime来收集,判断是否需要更深层次的编译。即对编译分层级