七、运行期优化

一、即时编译

1、逃逸分析

JVM将执行状态分成了5个层次:

  • 0层,解释执行(Interpreter) 【也就是将字节码解释成机器码的过程】
  • 1层,使用C1即时编译器编译执行(不带profiling)
  • 2层,使用C1即时编译器编译执行(带基本的profiling)
  • 3层,使用C1即时编译器编译执行(带完全的profiling)
  • 4层,使用C2即时编译器编译执行

  • 如果在第0层的时候,重复将同一个字节码解释成机器码,那即时编译器就会将字节码编译成机器码,然后存入Code Cache,下次遇到相同的代码,就会执行,无需再次编译
  • 这是即时编译器的好处,解释器遇到重复的字节码,还是会执行重复的解释
  • 如果profiling统计某个方法调用次数过多,那么会上升到C2即时编译器,来进行更全面的优化
  • 解释器是将字节码解释成所有平台都通用的机器码
  • JIT即时编译器是会根据平台类型,生成平台特定的机器码

总结:

总之就是发现热点代码,然后提高将其编译成机器码来提高效率

2、方法内联

3、字段优化

机器码级别处理缓存

节省1900去查找成员变量的操作。

二、反射优化

一开始调用的是native本地的反射invoke方法,然后执行了15次达到一个阈值之后,会将本地的反射实现类修改成GenerateMethodAccessor1的新的反射实现类,这个实现类会在内部将反射调用转化成类名.方法名的方式调用,提高效率

阈值15是可以通过参数设定的。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

栗子ing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值