JVM的运行模式由三种:
- 解释模式(Interpreted Mode):只使用解释器(-Xint 强制JVM使用解释模式),执行一行JVM字节码就编译一行为机器码
- 编译模式(Compiled Mode):只使用编译器(-Xcomp JVM使用编译模式),先将所有的JVM字节码一次编译为机器码,然后一次性执行所有机器码
- 混合模式(Mixed Mode):(-Xmixed 设置JVM使用混合模式)依然使用解释模式执行代码,但是对于一些“热点”代码采取编译器模式执行,这些热点代码对应的机器码会被缓存起来,下次执行无需再编译。JVM一般采用混合模式执行代码
这就是我们常见的JIT(Just In Time Compiler)即时编译技术。
在即时编译过程中JVM可能会对我们的代码做一些优化,比如对象逃逸分析等。
JVM运行模式 | 优点 | 适用场景 |
---|---|---|
解释模式 | 启动快 | 只需要执行部分代码,且大多数代码只会执行一次的情况 |
编译模式 | 启动慢,但是后期执行速度快,比较占用内存1 | 适合代码可能会被反复执行的场景 |
混合模式 | 一般JVM所默认的模式 |
因为机器码的数量至少是JVM字节码的十倍以上 ↩︎