Java 虚拟机总结给面试的你
- 作者:新网
- 来源:新网
- 浏览:100
- 2018-05-15 14:39:33
本篇主要针对Java虚拟机的晚期编译优化,Java内存模型与线程,线程安全与锁优化进行总结,其余部分总结请点击Java虚拟总结上篇 ,Java虚拟机总结篇。
本篇主要针对Java虚拟机的晚期编译优化,Java内存模型与线程,线程安全与锁优化进行总结,其余部分总结请点击Java虚拟总结上篇 ,Java虚拟机总结篇。

<
div> 一.晚期运行期优化
即时编译器JIT的作用就是热点代码转换为平台相关的机器码,并进行优化,它并不是一个虚拟机所必须的部分,只能说有它是锦上添花。
热点代码
热点代码分类
被多次调用的方法
被多次调用的循环体
热点探测判定方法
·基于采样的热点探测,虚拟机周期性地检查栈顶,发现某个方法经常出现在栈顶,那么这个方法就是热点方法,简单高效但不精确
基于计数器热点探测,为每个方法建立计数器来统计执行次数,超过阈值就是热点方法,Hotpot就是采用这种方法。分为方法计数器(统计方法),回边计数器(统计循环)
编译过程(Client Complier)
第一阶段:将字节码构造成高级中间代码表示(HIR)
第二阶段:将HIR变为LIR
第三阶段:使用线性扫描算法,在LIR上分配寄存器,产生机器代码
优化方法
公共子表达式优化
当一个表达式A的结果已经计算过了,且A中的所有变量都没有发生过变化,那么下一次要用到A时就不用计算了,而是直接取之前A的结果。
数组边界检查消除
方法内联
逃逸分析
逃逸的定义:一个在方法里定义的变量,作为参数传递给其他方法(方法逃逸),或者赋值给类变量(线程逃逸)。
优化方法:
栈上分配:不会逃逸的对象就不在堆上分配了,就在栈上分配,那么对象所占的
空间就可以随栈帧的出栈而销毁,减少垃圾收集系统的压力。
同步消除:如果一个变量肯定不会逃逸出线程,那么关于这个变量的同步措施就可以去掉。