首页 > 其他分享 >JVM分析+1,+=1,++的效率

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

时间:2023-12-24 11:44:41浏览次数:44  
标签:操作数 java ++ 局部变量 JVM Main 效率

工具准备

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

标签:操作数,java,++,局部变量,JVM,Main,效率
From: https://www.cnblogs.com/xiaofengs/p/17924201.html

相关文章

  • JVM虚拟机系统性学习-JVM调优实战之内存溢出、高并发场景调优
    调优实战-内存溢出的定位与分析首先,对于以下代码如果造成内存溢出该如何进行定位呢?通过jmap与MAT工具进行定位分析代码如下:publicclassTestJvmOutOfMemory{publicstaticvoidmain(String[]args){List<Object>list=newArrayList<>();for(int......
  • C++出现“printf/cout不明确”的问题的原因和解决方法(转)
    如果你有幸看到这个博客,那么我猜你应该已经碰上这个问题,而且正急着寻求方法,因此,我先把解决方法用最简单的一句话写出来解决方法为:**将文件中原有的usingnamespacestd;删除后保存cpp文件,再加上usingnamespacestd;保存cpp文件。问题即可解决**如果根据上述方法已经解决了这个问......
  • Qt/C++控件设计器/属性栏/组态/可导入导出/中文属性/串口网络/拖曳开发
    一、功能特点自动加载插件文件中的所有控件生成列表,默认自带的控件超过120个。拖曳到画布自动生成对应的控件,所见即所得。右侧中文属性栏,改变对应的属性立即应用到对应选中控件,直观简洁,非常适合小白使用。独创属性栏文字翻译映射机制,效率极高,可以非常方便拓展其他语言的属性......
  • C# .NET的BinaryFormatter、protobuf-net、Newtonsoft.Json以及自己写的序列化方法序
    https://www.cnblogs.com/s0611163/p/11872484.html测试结果整理后: 结论:1、这几个工具中,protobuf-net序列化和反序列化效率是最快的2、BinaryFormatter和Newtonsoft.Json反序列化慢的比较多3、Newtonsoft.Json序列化后的文件体积比较大4、Newtonsoft.Json在序列化反序列......
  • 【C++】将 C++ 程序 以 Windows Service 服务部署
    服务主函数1)先进行安装your_program.exeinstall2)在进入电脑管理-服务,进行启动3)若要多启动方式,在下面主函数中,进行启动类别判断是服务形式启动还是控制台程序启动int__cdecl_tmain(intargc,TCHAR*argv[])服务代码作为程序入口代码,将自己程序的主函数代码,访入SvcInit函......
  • C++简单实现list链表数据结构(一)
    链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。链表的组成:链表由一系列结点组成结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域C++STL中的链表是一个双向循环链表由于链表的存储方式并不是连续的内存空......
  • C++知识点总结
    第二章1.基本数据类型int有16位,即两个字节,char只占一个字节。在VisualC++6.0中,对float提供6位有效数字,对double提供15位有效数字,并且float和double的数值范围不同。对float分配4个字节,对double和longdouble分配8个字节。2.常变量关键字const。变量的值在程序运行期间不能改......
  • C++:最大值最小值及其索引
    std::max_element和std::min_element 是C++标准库<algorithm>中的函数,可以得到数组和向量(vector)的最值及其索引intcard[6]={1,2,3,4,5,6}intmaxValue=*max_element(card.begin(),card.end());intminValue=*min_element(card.begin(),card.end());intmaxPositi......
  • C++ --- 函数重载
    什么是函数重载函数重载: 是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数或类型或顺序)必须不同,常用来处理实现功能类似数据类型不同的问题。函数重载是C++在C语言基础上进行的改进,解决了C语言同名函数无法服务不同类型......
  • C++U5-11-特殊二叉树
    学习目标 完全二叉树:二又树拥有的性质,在完全二叉树中都拥有 性质 练习1 练习2 练习3编程题:[完全二叉树的叶子结点]【算法分析】递归,前序遍历输出。【参考代码】#include<iostream>usingnamespacestd;constintSIZE=1010;structnode{......