JVM模式:
Client:启动快,启动后性能不如Server,适合桌面应用。
Server:启动慢,启动后性能高,适合服务器后台。
热点代码:
被多次调用的方法
被多次执行的循环体
热点探测:
基于采样
基于计数器
计数器的种类:
方法调用计数器(默认阈值在Client模式下是 1500 次,在Server模式下是 10000 次)
回边计数器
两个计数器的协作
Java代码(源代码)、字节码/中间码、机器码/本地代码/机器指令
JIT(Just In Time)编译器/即时编译器:将热点代码对应的字节码编译成机器码进行存储,用到对应的字节码时,直接执行存储的机器码。
解释器:用到对应的字节码时,编译成机器码执行。
即时编译器分类:
Client Compiler - C1编译器
Server Compiler - C2编译器
HotSpot运行模式(默认是混合模式):
解释模式
编译模式(优先JIT编译,无法进行时解释)
混合模式
分层编译策略:
第0层:解释执行,解释器不开启性能监控功能,可触发第1层编译。
第1层:也称为C1编译,将字节码编译为本地代码,进行简单,可靠的优化,如有必要将加入性能监控的逻辑。
第 2 层(或 2 层以上):也称为 C2 编译,也是将字节码编译为本地代码,但是会启用一些编译耗时较长的优化,甚至会根据性能监控信息进行一些不可靠的激进优化。
编译优化技术:
语言无关的经典优化技术之一:公共子表达式消除
语言相关的经典优化技术之一:数组范围检查消除
最重要的优化技术之一:方法内联
最前沿的优化技术之一:逃逸分析(方法逃逸、线程逃逸)
参考:https://www.jianshu.com/p/fbced5b34eff