dup java_关于JVM字节码中dup指令的问题?
查看字节码指令的时候,可以看到每个new指令之后都会跟一个dup指令。
因为new指令之后,紧跟着就会调用指令invokespecial进行初始化,下面是invokespecial的指令格式。看一下操作数栈,需要一个objectref引用(对象的地址),后面是可选的参数;由于初始化没有返回值,调用之后没有东西入栈(用...表示没有入栈)。
也就是说初始化指令会使当前对象的引用出栈,如果不复制一份,操作数栈中就没有当前对象的引用了,后面再进行其他的关于这个对象的指令操作时,就无法完成。
例如public static void main(String[] args) {
String t = "aaa";
String t1 = t + "bbb";
}
指令0 ldc #2
2 astore_1
3 new #3
6 dup
7 invokespecial #4 ()V>
10 aload_1
11 invokevirtual #5
14 ldc #6
16 invokevirtual #5
19 invokevirtual #7
22 astore_2
23 return
3行 栈顶出现StringBuilder的引用
6行 复制一份,栈顶部有两份一样的引用
7行 栈顶引用出栈
11行 新的栈顶引用出栈完成invokevirtual调用,完成调用后返回对象的引用入栈,这时栈顶还是那个对象的引用。因为这个函数调用有返回值,而且是this。
dup java_关于JVM字节码中dup指令的问题?相关推荐
- 欧尼酱讲JVM(08)——字节码中方法内部结构的剖析
用到的工具--Jclasslib IDEA提供了插件,很方便. 首先 先看一段代码: public class LocalVariablesTest {private int count = 0;pu ...
- JVM字节码指令集大全及其介绍
Java是怎么跨平台的 我们上计算机课的时候老师讲过:"计算机只能识别0和1,所以我们写的程序要经过编译器翻译成0和1组成的二进制格式计算机才能执行".我们编译后产生的.class ...
- 【JVM · 字节码】指令集 解析说明
1. 概述 Java字节码指令对于虚拟机,就好像汇编语言对于计算机,属于基本执行指令. Java虚拟机的指令由 一个字节长度 的.代表着某种特定操作含义的数字(称为 操作码/Opcode)以及跟随其后 ...
- Java指令全集_Java的JVM字节码指令集详解
本文详细介绍了如何使用javap查看java方法中的字节码.以及各种字节码的含义,并且配以完善的案例,一步步,从头到尾带领大家翻译javap的输出.在文末还附有JVM字节码指令集表. 本文不适合没有J ...
- 深入理解JVM字节码(二)
目录 字节码基础 一.字节码概述 二.Java虚拟机栈和栈帧 栈帧 1. 局部变量表 2. 操作数栈 三.字节码指令 1. 加载和存储指令 2. 操作数栈指令 3. 对象相关的字节码指令 1. ``方 ...
- JVM 调优实战--JVM字节码
目录 通过javap命令查看class文件的字节码内容 常量池 描述符 字段描述符 方法描述符 解读方法字节码 图解 研究i++与++i的不同 查看字节码 对比 分析字符串拼接孰优孰劣 小结 通过j ...
- 深入理解JVM字节码(一)
目录 深入剖析Class文件结构 一.初探class文件 二.class文件结构剖析 (一) 魔数 (二) 版本号 (三) 常量池 1. CONSTANT_Integer_info和CONSTANT_ ...
- java开发C语言编译器:把C实现的快速排序算法编译成jvm字节码
有了前面一系列的铺垫和准备后,我们终于能走到至关重要的一刻.在本节,我们将用C语言开发快速排序算法,然后利用我们的编译器把它编译成java字节码,让C语言编写的快速排序算法能在java虚拟机上顺利执行 ...
- 2个字节能存多少个16进制_初探JVM字节码 - 疾风老头
作者: LemonNan 原文地址: 代码地址: 字节码 概述 本篇要介绍的是能 "一次编译,到处运行的 JVM 字节码" 为什么能到处运行? 是因为在 任意平台下所编译出来的 c ...
最新文章
- 屏蔽微软的SignalR
- mysql为什么表大了要重建_为什么MySQL分库分表后总存储大小变大了?
- python——前端常用的标签
- VS2013+OpenCV3.0编译CMT跟踪算法
- Python生成器 yield
- javapythonc就业人数比例_P100 统计各年龄段的人数
- 1.LVS 安装简介
- python3中def的用法-python3中的def函数语法错误
- Linux系统环境:DM8数据库安装
- Matlab/Simulink-Boost电路双闭环仿真搭建
- 互联网日报 | 5月18日 星期二 | 中国移动启动A股上市;京东物流启动全球招股;快手发布首款自研手游产品...
- 计算机应用基础名词解释动画,《计算机应用基础》期末考试复习题库-名词解释题题库...
- sql练习 使用储存池
- 神经网络模型画图工具,神经网络模型图怎么画
- 网站经常出现502错误怎么办
- 金蟾论金:4.13黄金探底回升收复跌势、晚间黄金走势分析指导
- 设计FMEA步骤三:功能分析
- 2017杭电ACM集训队单人排位赛 - 2 -1002 地狱飞龙 (辛普森公式求积分)(模板)
- 「智能交通技术」知识星球更新内容(2.20至2.28)
- c语言开发工程师英文,工程师用英语怎么说