JAVA编译器

java是解释型语言,但是为了加快java的运行速度,java编译器横空出世。

解释运行效率低,为了提升代码的执行性能。JDK提供将字节码编译为机器代码的支持,编译在后台运行,通常成为JIT编译器。在执行过程中对执行效率高的代码进行编译,对执行不频繁的代码则继续采用解释的方式。编译的好处有哪些呢,让我们看看下面的例子:

1.方法内联

对于java语言来说,通常要调用多个方法完成功能。执行时要经历多次参数传递。采用方法内联的方式把调用的方法指令直接植入到当前方法中。

例如:

public void bb(){
   cc();
}
public void cc(){
  ...
}

当编译时,如果cc编译完的字节数小于等于35字节,那么会演变成类似的结构

publicvoidbb(){

//cc内容

}

2.去虚拟化

去虚拟化是指在装载CLASS文件后,进行类层次的分析,如发现类中的方法只提供一个实现类,那么对于调用了此方法的代码,也可进行方法内联,从而提升执行的性能。

3.冗余消除

指在编译时,根据运行时的状况进行代码折叠或消除。

4.标量替换

用简单变量替换复合对象。如用int取代Integer

5.栈上分配

如果某个对象没有逃逸,那么直接在栈上直接创建该对象。

6.同步消除

如果发现同步对象未逃逸,那么也就没有同步的必要了。

相关推荐