JVM分析+1,+=1,++的效率

工具准备

  • idea
  • jclasslib插件

准备

src/main/java/com/xiaofengs/Main.java

public class Main {
    public static void main(String[] args) {
        int i=0,j=0,k=0;
        i++;
        j=j+1;
        k+=1;
    }
}

接着使用javac将其编译,命令i如下

javac src/main/java/com/xiaofengs/Main.java -d target/classes

分析

找到 target/classes/com/xiaofengs/Main.class
使用jclasslib分析
jclasslib分析Main方法
根据JVM规范可以知道
iconst_n是在操作数栈中声明值为n的变量
istore_n则是将操作数栈的结果存储进局部变量表数组
iinc m by n 将局部变量表数组中索引为m的变量增加n
iload_n 将局部变量表数组地址为n的变量加载进入操作数栈
iadd 将操作数栈的值进行相加操作

在分别存储 i j k之后
i++是直接在局部变量表数组中存储i+1后的数值
j=j+1则需要先在常量池中声明1后再进行加的操作然后存储到局部变量表数组中
k+=1则和k++操作类似

总结

由上方分析不难看出在编写程序中 i+=n 的操作原理上执行效率比 i = i+n 的 快

相关

JVM规范链接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小风XFS

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

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

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

打赏作者

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

抵扣说明:

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

余额充值