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的) 解释器
当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,直接运行. 当程序启动后,随着时间打推移,编译器逐渐发挥作用,把越来越多的代码编译成本地代码,这样可以减少解释器的中间损耗,获得更好的执行效率. 当程序运行环境中内存资源限制较大,可以使用解释执行节约内存,反之可以使用便一直行来提升效率. 同时解释器还可以作为作为编译器激进化时后背的"逃生门".
编译器优化技术 方法内联 逃逸分析 基本原理:分析对象动态作用域,当一个对象在方法里边被定义后,它可能被外部方法索引用.例如作用调用参数传递到其他方法中,这种称为方法逃逸;甚至还有可能被外部线程访问到.譬如赋值给可以在其他线程中访问的实例变量,这种称为线程逃逸;从不逃逸,方法逃逸到线程逃逸,称为对象由低到高的不同逃逸程度. 类型: 栈上分配 标量替换 同步消除 公共表达式消除 数组边界检查消除
|