文章字数:812,阅读全文大约需要3分钟
JIT(Just in time compilation)及时编译,能够让java程序执行速度提升
优化手段
cpu编译优化
:针对特定的处理器型号指令集编译热点代码,提升性能减少查表次数
:调用Object.equals()
方法,在运行时发现一直是在调用String
的equals()
编译后直接调用String.equals()
逃逸分析
:变量默认分配在主存上,但是方法中变量未逃出使用的生命周期则可以考虑在栈上分配内存。如果是对象则可以标量替换(对象替换成相应字段的变量)寄存器分配
:部分变量可以分配在寄存器中,相对主存,读取性能提升。热点代码机器码缓存
:缓存热点代码的机器码,但是缓存空间有固定大小,到达上限就不能缓存了方法内联
:热点方法的内部调用的方法会被复制到调用方法里,减少调用开销。
方法内联
- 条件
1 | //次数限制 |
- 建议
1 | 1.更小的方法体,JVM总是偏好更小的方法。 |
逃逸分析
变量在HotSpot VM中逃逸分析的类别分为
NoEscape
:未逃逸,可以进行标量替换(用局部变量替换对象字段)ArgEscape
:作为参数被传入其它方法中,此情况下如果被调用的方法和调用方法产生方法内联,也可以进行标量替换。GlobalEscape
:无法标量替换