JIT是Just-In-Time的缩写,是Java虚拟机把字节码的再编译为本地代码的编译器的名称。我为什么突然想写这个呢?因为国内对JIT的研究非常少,而且面试也问得少,但是我认为JIT对虚拟机特别重要,因为对性能的提升非常明显。java虚拟机使用的是jvm指令集,而底层机器有自己的指令集,指令集的差异使得这个“翻译”过程非常耗费性能。对于这个问题,在JIT之前,java曾经有AOT(Ahead-Of-Time),这种编译器是将字节码bytecode提前编译为机器代码。AOT被淘汰的原因是统计发现80%的bytecode只执行一次,那么全部编译为机器代码,就没有必要了。对于只执行一次的代码,解释器性能更好,因为编译为本地代码开销比较大。
我这个子专栏专讲JIT优化。主要分为以下67种优化技术,后面的星号表示面试被问概率,星号越多被问概率越大:
编译策略compiler tactics
proof-based techniques
flow-sensitive rewrites
language-specific techniques
speculative (profile-based) techniques
memory and placement transformation
loop transformations
global code shaping
control flow graph transformation
总结下,面试最热门问题是:
1. 延迟编译
2. 分层编译
3. 栈上替换
4. 逃逸分析
5. 锁消除
6. 锁粗化
除这六种优化外,其余61种优化,面试几乎不会问到。



