查看字节码指令的时候,可以看到每个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指令的问题?相关推荐

  1. 欧尼酱讲JVM(08)——字节码中方法内部结构的剖析

    用到的工具--Jclasslib IDEA提供了插件,很方便. 首先 先看一段代码: public class LocalVariablesTest {private int count = 0;pu ...

  2. JVM字节码指令集大全及其介绍

    Java是怎么跨平台的 我们上计算机课的时候老师讲过:"计算机只能识别0和1,所以我们写的程序要经过编译器翻译成0和1组成的二进制格式计算机才能执行".我们编译后产生的.class ...

  3. 【JVM · 字节码】指令集 解析说明

    1. 概述 Java字节码指令对于虚拟机,就好像汇编语言对于计算机,属于基本执行指令. Java虚拟机的指令由 一个字节长度 的.代表着某种特定操作含义的数字(称为 操作码/Opcode)以及跟随其后 ...

  4. Java指令全集_Java的JVM字节码指令集详解

    本文详细介绍了如何使用javap查看java方法中的字节码.以及各种字节码的含义,并且配以完善的案例,一步步,从头到尾带领大家翻译javap的输出.在文末还附有JVM字节码指令集表. 本文不适合没有J ...

  5. 深入理解JVM字节码(二)

    目录 字节码基础 一.字节码概述 二.Java虚拟机栈和栈帧 栈帧 1. 局部变量表 2. 操作数栈 三.字节码指令 1. 加载和存储指令 2. 操作数栈指令 3. 对象相关的字节码指令 1. ``方 ...

  6. JVM 调优实战--JVM字节码

    目录 通过javap命令查看class文件的字节码内容 常量池 ​描述符 字段描述符 方法描述符 解读方法字节码 图解 研究i++与++i的不同 查看字节码 对比 分析字符串拼接孰优孰劣 小结 通过j ...

  7. 深入理解JVM字节码(一)

    目录 深入剖析Class文件结构 一.初探class文件 二.class文件结构剖析 (一) 魔数 (二) 版本号 (三) 常量池 1. CONSTANT_Integer_info和CONSTANT_ ...

  8. java开发C语言编译器:把C实现的快速排序算法编译成jvm字节码

    有了前面一系列的铺垫和准备后,我们终于能走到至关重要的一刻.在本节,我们将用C语言开发快速排序算法,然后利用我们的编译器把它编译成java字节码,让C语言编写的快速排序算法能在java虚拟机上顺利执行 ...

  9. 2个字节能存多少个16进制_初探JVM字节码 - 疾风老头

    作者: LemonNan 原文地址: 代码地址: 字节码 概述 本篇要介绍的是能 "一次编译,到处运行的 JVM 字节码" 为什么能到处运行? 是因为在 任意平台下所编译出来的 c ...

最新文章

  1. 屏蔽微软的SignalR
  2. mysql为什么表大了要重建_为什么MySQL分库分表后总存储大小变大了?
  3. python——前端常用的标签
  4. VS2013+OpenCV3.0编译CMT跟踪算法
  5. Python生成器 yield
  6. javapythonc就业人数比例_P100 统计各年龄段的人数
  7. 1.LVS 安装简介
  8. python3中def的用法-python3中的def函数语法错误
  9. Linux系统环境:DM8数据库安装
  10. Matlab/Simulink-Boost电路双闭环仿真搭建
  11. 互联网日报 | 5月18日 星期二 | 中国移动启动A股上市;京东物流启动全球招股;快手发布首款自研手游产品...
  12. 计算机应用基础名词解释动画,《计算机应用基础》期末考试复习题库-名词解释题题库...
  13. sql练习 使用储存池
  14. 神经网络模型画图工具,神经网络模型图怎么画
  15. 网站经常出现502错误怎么办
  16. 金蟾论金:4.13黄金探底回升收复跌势、晚间黄金走势分析指导
  17. 设计FMEA步骤三:功能分析
  18. 2017杭电ACM集训队单人排位赛 - 2 -1002 地狱飞龙 (辛普森公式求积分)(模板)
  19. 「智能交通技术」知识星球更新内容(2.20至2.28)
  20. c语言开发工程师英文,工程师用英语怎么说

热门文章

  1. Android的生命周期
  2. ubuntu截图快捷健
  3. 威5创非凡,领航再出击 | 新华三集团成立五周年庆
  4. 宏观经济学 - 国民收入的决定:收入-支出模型
  5. Airbnb民宿预订
  6. 小米MIUI开发版应用闪退问题 Secure.ANDROID_ID must not be null
  7. 有内鬼,终止换脸!用Landmarks Debug找出不老实的脸。
  8. 设置笔记本电脑插入USB鼠标时,自动禁用触摸板
  9. 关于3分频电路的讨论
  10. td设置虚线dotted框,在chrome下有时会出现实线bug