java 执行机制_java类执行机制---JIT编译执行(机器码)与反射执行(一)

昨天解释了下JAVA的解释执行但其总体来说效率较低,为提升性能,JDK提供了将字节码编译为机器码,一种运行时编译的功能(JIT(just-in-time)编译器)--对执行频率高的代码进行JIT编译,反之的则继续解释执行。

在JIT编译上JAVA提供了2种模式:C1(clientcompiler)和C2(server compiler)。

C1:采用线性扫描寄存器分配算法(对这个算法暂时还没研究所以这里不讨论开去了,主要讲一些其他方面的优化:方法内联、去虚拟化、去冗余代码)。

方法内联:先看一段代码

public void test(){

.....

test2();

.....

}

public void test2(){

....

//test2

....

}

以上代码如果test2方法中编译后的字节数小于默认的35个字节则编译后结构会变成如下:

public void test(){

.....

test2;

.....

}

这样就是方法内联了

稍微优化了一下,当然那个35字节是可以修改的命令为-XX:MaxInlineSize=35来控制。

去虚拟化:在Class文件被转载后,对类的层次结构进行分析,如果类的方法只提供一个实现类,那么对调用此方法的代码也可以进行方法内联,从而提高性能。看一段代码想必大家就会有点明了了:

接口的实现往往会有很多如果只有一个实现类的话那么就能方法内联了,

public interface TestInterface(){

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值