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

发布时间 2023-12-24 11:42:28作者: XFS小风

工具准备

  • 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规范链接