逃逸分析
标量替换
栈上分配
锁消除
锁粗化
JIT
JVM 语言无关性
字节码执行
- 解释执行
- 即时编译 JIT
JIT是编译成本地字节码。非java字节码,是机器直接运行的本地编码,可能是汇编等。
编译器
C1 class -> 本地编码(不做优化)
C2 性能优化
- 热点探测技术
- 方法内联
热点探测技术
方法体大小限制 - 栈上分配
- 方法内联
C2比较难维护,Java 10 以后开发了新的Graal(java写的)
- 分层编译
古代有一位将军喝酒成瘾,将军啊将军,他越喝越有型。