JVM编译优化

1 篇文章 0 订阅

JVM编译优化


编译器与解释器

解释器

省去编译时间,立即执行

编译器

  • how?3阶段
    1.高级中间代码

    方法内联,常量替换

    2.低级中间代码

    控制检查消除,范围检查消除

    3.机器代码

    逃逸分析

  • client vs erver

    C1获取更高的编译速度
    C2获取更好的编译质量

触发条件(热点代码)

  • 被多次调用方法
  • 循环体
  • 基于计数器的热点探针方法

编译优化技术

  • 数组边界检查消除
int a[] = new int[10000];
for(int i=0;i<10000;i++){
    a[i]=i;//系统会自动进行上下界检查,但是从上下文可以判断不需要检查
}
表达式优化
方法内联

看上去虽然是把调用方法替换成目标方法,但是因为java的多态性,有些对象只有运行阶段才知道其实际类型,所以需要采用激进优化,如果发生于接受者不一致的情况,取消内联

逃逸分析

同步消除: 方法内部StringBuffer被StringBuilder替换
栈上分配: 对象占用随着栈帧出栈而销毁,既减轻gc又加快执行速度
标量替换:

  static class Person {
    int age;
  }

  public int test() {
    Person person = new Person();
    person.age = 10;
    //...
    return person.age;
  }
  //-----被优化后-----
  public int test() {
    int age = 10;
    //...
    return age;
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值