JVM编译优化

编译优化方案

一、方法内联:消除方法调用成本(方法调用需要创建方法栈)。

  class B {

    int i;

    int get(){

      return i;

    }

  }

  public void test() {

    y = b.get();

    z = b.get();

    sum = y+z;

  }

  test方法优化为:

  public void test(){

    y=b.i;

    z=b.i;

    sum=y+z;    

  }

 

二、逃逸分析:当一个对象在方法中定义后,它可能被外部方法所引用,例如作为调用的参数传递到其它的方法中,称为方法逃逸。甚至还有可能被外部线程访问到,譬如赋值给类变量,称为线程逃逸。

  1、对象的栈上分配

    如果确定一个对象不会进行逃逸,那么该对象创建的时候,就会在栈上进行。对象的内存空间(生死)随着栈帧的生命周期。无需进行MGC就可以回收对象的内存。

  2、同步消除

    由于方法栈是线程私有的,如果确定对象不会逃逸,那么方法内的锁会被优化掉。

  3、标量替换

    标量:原始数据类型(int,long……)以及reference类型。

    聚合量:多个标量组合成的类型。(也就是一般的POJO类)

    如果证明一个对象不会逃逸,那么在使用该对象的时候,会拆分为相应的标量,而不创建该对象。

 

转载于:https://www.cnblogs.com/chen--biao/p/10061950.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值