jvm编译优化

前端编译和优化

1
2
java c 编译器
java 语法糖

后端编译和优化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
即时编译器
客户端编译器(c1编译器) -client
服务端编译器(c2编译器) -server
graal编译器(代替c2的)
解释器

当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,直接运行.
当程序启动后,随着时间打推移,编译器逐渐发挥作用,把越来越多的代码编译成本地代码,这样可以减少解释器的中间损耗,获得更好的执行效率.
当程序运行环境中内存资源限制较大,可以使用解释执行节约内存,反之可以使用便一直行来提升效率.
同时解释器还可以作为作为编译器激进化时后背的"逃生门".

编译器优化技术
方法内联
逃逸分析
基本原理:分析对象动态作用域,当一个对象在方法里边被定义后,它可能被外部方法索引用.例如作用调用参数传递到其他方法中,这种称为方法逃逸;甚至还有可能被外部线程访问到.譬如赋值给可以在其他线程中访问的实例变量,这种称为线程逃逸;从不逃逸,方法逃逸到线程逃逸,称为对象由低到高的不同逃逸程度.
类型:
栈上分配
标量替换
同步消除
公共表达式消除
数组边界检查消除