java是解释型语言,但是为了加快java的运行速度,java编译器横空出世。
解释运行效率低,为了提升代码的执行性能。JDK提供将字节码编译为机器代码的支持,编译在后台运行,通常成为JIT编译器。在执行过程中对执行效率高的代码进行编译,对执行不频繁的代码则继续采用解释的方式。编译的好处有哪些呢,让我们看看下面的例子:
1.方法内联
对于java语言来说,通常要调用多个方法完成功能。执行时要经历多次参数传递。采用方法内联的方式把调用的方法指令直接植入到当前方法中。
例如:
当编译时,如果cc编译完的字节数小于等于35字节,那么会演变成类似的结构
public void bb(){
//cc内容
}
2.去虚拟化
去虚拟化是指在装载CLASS文件后,进行类层次的分析,如发现类中的方法只提供一个实现类,那么对于调用了此方法的代码,也可进行方法内联,从而提升执行的性能。
3.冗余消除
指在编译时,根据运行时的状况进行代码折叠或消除。
4.标量替换
用简单变量替换复合对象。如用int取代Integer
5.栈上分配
如果某个对象没有逃逸,那么直接在栈上直接创建该对象。
6.同步消除
如果发现同步对象未逃逸,那么也就没有同步的必要了。
解释运行效率低,为了提升代码的执行性能。JDK提供将字节码编译为机器代码的支持,编译在后台运行,通常成为JIT编译器。在执行过程中对执行效率高的代码进行编译,对执行不频繁的代码则继续采用解释的方式。编译的好处有哪些呢,让我们看看下面的例子:
1.方法内联
对于java语言来说,通常要调用多个方法完成功能。执行时要经历多次参数传递。采用方法内联的方式把调用的方法指令直接植入到当前方法中。
例如:
public void bb(){
cc();
}
public void cc(){
...
}
当编译时,如果cc编译完的字节数小于等于35字节,那么会演变成类似的结构
public void bb(){
//cc内容
}
2.去虚拟化
去虚拟化是指在装载CLASS文件后,进行类层次的分析,如发现类中的方法只提供一个实现类,那么对于调用了此方法的代码,也可进行方法内联,从而提升执行的性能。
3.冗余消除
指在编译时,根据运行时的状况进行代码折叠或消除。
4.标量替换
用简单变量替换复合对象。如用int取代Integer
5.栈上分配
如果某个对象没有逃逸,那么直接在栈上直接创建该对象。
6.同步消除
如果发现同步对象未逃逸,那么也就没有同步的必要了。