003-整型入栈指令(iconst、bipush、sipush、ldc)
一、概述
官网:http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html
参考地址:http://www.linmuxi.com/2016/02/25/jvm-int-pushstack-01/
本篇主要分享下在JVM中int类型数值采用何种指令入栈的,根据int值范围JVM入栈字节码指令就分为4类,下面分别介绍下这四类指令。
二、前言
当int类型
取值-1~5采用iconst指令
取值-128~127采用bipush指令
取值-32768~32767采用sipush指令
取值-2147483648~2147483647采用 ldc 指令。
2.1、iconst指令
当int取值-1~5时,JVM采用iconst指令将常量压入栈中。
    public static void main(String[] args) {
        int i = 5;
        int j = -1;
    }
查看class文件
public static void main(java.lang.String[]);
Code:
0: iconst_5
1: istore_1
2: iconst_m1
3: istore_2
4: return
分析class文件,int取值0~5时JVM采用iconst_0、iconst_1、iconst_2、iconst_3、iconst_4、iconst_5指令将常量压入栈中,取值-1时采用iconst_m1指令将常量压入栈中。
2.2、bipush
当int取值-128~127时,JVM采用bipush指令将常量压入栈中。
    public static void main(String[] args) {
        int i = 127;
    }
查看class文件
public static void main(java.lang.String[]);
Code:
0: bipush 127
2: istore_1
3: return
2.3、sipush
当int取值-32768~32767时,JVM采用sipush指令将常量压入栈中。
    public static void main(String[] args) {
        int i = 32767;
    }
查看class文件
public static void main(java.lang.String[]);
Code:
0: sipush 32767
3: istore_1
4: return
2.4、ldc
当int取值-2147483648~2147483647时,JVM采用ldc指令将常量压入栈中。
    public static void main(String[] args) {
        int i = Integer.MAX_VALUE;
    }
查看class
public static void main(java.lang.String[]);
Code:
0: ldc #3 // int 2147483647
2: istore_1
3: return
采用ldc指令将2147483647常量压入栈中,需要注意的是ldc指令是从常量池中获取值的,也就是说在这段范围(-2147483648~2147483647)内的int值是存储在常量池中的。
003-整型入栈指令(iconst、bipush、sipush、ldc)的更多相关文章
- JVM字节码之整型入栈指令(iconst、bipush、sipush、ldc)
		官网:http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html 原文地址:http://www.linmuxi.com/2016/02 ... 
- JVM 字节码之 int 入栈指令
		本文转载自JVM 字节码之 int 入栈指令(iconst.bipush.sipush.ldc) 前言 本文介绍 int 入栈指令 iconst.bipush.sipubh.Idc. 当 int 取值 ... 
- ARM的栈指令
		ARM的指令系统中关于栈指令的内容比较容易引起迷惑,这是因为准确描述一个栈的特点需要两个参数: 栈地址的增长方向:ARM将向高地址增长的栈称为递增栈(Descendent Stack),将向低地址增长 ... 
- ARM的栈指令(转)
		ARM的指令系统中关于栈指令的内容比较容易引起迷惑,这是因为准确描述一个栈的特点需要两个参数: 栈地址的增长方向:ARM将向高地址增长的栈称为递增栈(Descendent Stack),将向低地址增长 ... 
- 为什么阿里巴巴Java开发手册中强制要求整型包装类对象值用 equals 方法比较?
		在阅读<阿里巴巴Java开发手册>时,发现有一条关于整型包装类对象之间值比较的规约,具体内容如下: 这条建议非常值得大家关注, 而且该问题在 Java 面试中十分常见. 还需要思考以下几个 ... 
- 关于整型Integer、Int32、Int64、IntPtr、UINT、UInt32、Cardinal、UInt64、UIntPtr、NativeUInt、Pointer、Handle
		知识点1:UIntPtr = NativeUInt = Pointer = Handle 随程序的位数改变而改变.如下: 所以以后再用指针的时候要这样:UintPtr/NativeUInt(实例) = ... 
- Linux漏洞分析入门笔记-CVE_2018_6323_整型溢出
		操作系统 Ubuntu 16.04 /32 位 调试器 IDA pro 7.0 漏洞软件 binutils-2.29.1 0x00: 漏洞描述 1.什么是整数溢出: 在计算机中,整数分 ... 
- MakeObjectInstance的前世今生(关键是ECX的何时入栈以及Self指针何时存储的)
		高手们的文章有很大启发,但是总有些小错,也有没交代清楚的,以下是我的理解: 编译器编译MainWndProc的时候,它是一个正常Delphi普通函数,MakeObjectInstance对它做变换是运 ... 
- javascript没有长整型
		记录一下前几天踩坑的经历. 背景:一个项目某一版之后很多用easyui的表格控件treegrid渲染的表格都显示不出来了 奇怪的地方主要有以下几点: 项目在测试环境才会这样,在本机能够正常运行,多次重 ... 
随机推荐
- Java里的并发容器与安全共享策略总结
			一.并发容器 ArrayList --> CopyOnWriteArrayList 概念 : 简单的讲就是写操作时赋值,当有新元素添加到CopyOnWriteArrayList时,它先从原有的数 ... 
- Java 8中的 Streams API 详解
			为什么需要 Stream Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念.它也不同于 StAX 对 ... 
- 【ODPS】UDF基础
			 UDF全称User Defined Function,即用户自己定义函数.ODPS提供了非常多内建函数来满足用户的计算需求,同一时候用户还能够通过创建自己定义函数来满足 不同的计算需求. UDF ... 
- Atitit。sql2016标准化的规划方案 v3 q2a
			Atitit.sql2016标准化的规划方案 v3 q2a 1. Sql标准化的历史3 1.1. Sql92标准4 1.2. Sql99标准4 1.3. SQL:2003为例,它包括以下9个部分 5 ... 
- codeforces  183B - Zoo
			/* 题意:给出n,m. n表示给出的n个横坐标为1-n,y为0的坐标m表示以下有m个坐标,在横坐标上的点 向各个角度看,在可以看到最多的点在同一条直线上的点的做多值为横坐标这一点的值,最后各个 横坐 ... 
- php画图应用之验证码
			在画图里面,就像之前所说的.php的画图是真正动态画图,尽管自己承认会出的图是非常不好看的.但我们主要关注的应该还是数据处理. 验证码我们差点儿无处不见,它的产生和画图技术是密不可分的.事实上,简单的 ... 
- Mockito - Wanted but not invoked: Actually, there were zero interactions with this mock
			要测试的类:IndexController.java 代码: @Mock private TemplateWrapper templateWrapper = spy(new TemplateWrapp ... 
- DataUml Design 教程4-代码生成
			DataUml Design 生成代码非常灵活,它是基于模板形式生成代码,如果不懂类结构的话写模型就比较困难了.这里我只讲解下如何生成代码,代码模板规则下一节将介绍. 1 ... 
- ACM Computer Factory - poj 3436 (最大流)
			Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5949 Accepted: 2053 Special Judge ... 
- jsp中的http status 500错误问题怎么解决
			HTTP 500 - 内部服务器错误如果有其他错误提示,需根据其提示进行修改.如果没有其他错误提示,则可以重启tomcat服务器解决.HTTP错误代码介绍: HTTP 400 - 请求无效HTTP 4 ... 
