Java—字节码文件解读

原文

public class ClassIntrucation {public static void main(String[] args) {int i = 10;int j = i;j++;++j;}
}

查看字节码文件命令

 javap -c 字节码文件

例如:

javap -c ClassIntrucation

结果

public class ClassIntrucation {public ClassIntrucation();Code:0: aload_01: invokespecial #1                  // Method java/lang/Object."<init>":()V4: returnpublic static void main(java.lang.String[]);Code:0: bipush        102: istore_13: iload_14: istore_25: iinc          2, 18: iinc          2, 111: return
}

解读

第一个方法:

这是类的构造方法,第一个先执行类的构造方法。具体内容不过多介绍。

第二个方法:

这是main 方法,执行代码逻辑如下:

bipush    10             将字面量数字 10  压入操作数栈中。 

istore_1                   将操作数栈中的值弹栈放入局部变量表中的槽位1.

iload_1                     将局部变量表槽位1的值复制一份加载(压栈)操作栈中。

istore_2                    将操作数栈中的值弹栈放入局部变量表中的槽位2.

iinc          2,1         将局部变量表槽位2的值压栈操作数栈中,值加一,弹栈槽位2

iinc          2,1         将局部变量表槽位2的值压栈操作数栈中,值加一,弹栈槽位2

解读 i++ 和 ++i

public class ClassIntrucation {public static void main(String[] args) {int i = 10;int j = i++;int k = ++i;}
}

 字节码解读

public class ClassIntrucation {public ClassIntrucation();Code:0: aload_01: invokespecial #1                  // Method java/lang/Object."<init>":()V4: returnpublic static void main(java.lang.String[]);Code:0: bipush        102: istore_13: iload_14: iinc          1, 17: istore_28: iinc          1, 111: iload_112: istore_313: return
}

槽位1 : i               槽位2:  j                    槽位3: k

1. 将槽位1的值(10) 复制一份  压栈到操作数栈中。   

【10】

2. 将槽位1 的值 取出压栈 到操作数栈中 ,值加一,弹栈到槽位1。

【10,10 + 1】-->【10】    i++;   i = 11;

3. 操作数栈弹栈到槽位2。           

【】     j = 10;

1. 将槽位1 的值 取出压栈 到操作数栈中 ,值加一,弹栈到槽位1。

【11 + 1】 --> 【】   ++i;    i = 12;   

2. 将槽位1 的值 (12)复制一份到操作数栈中。   

【12】  

3. 操作数栈弹栈到槽位3.       

【】    k = 12;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/704365.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用c++实现快速排序、最大子段和问题

6.2.2 快速排序 【问题】快速排序(quick sort)的分治策略如下&#xff08;图6-5)。 (1)划分&#xff1a;&#xff08;选定一个记录作为轴值&#xff0c;以轴值为基准将整个序列划分为两个子序列&#xff0c;轴值的位置在划分的过程中确定&#xff0c;并且左侧子序列的所有记录…

Linux连接文件那点事

什么是连接文件 将一个文件和另一个文件建立联系&#xff0c;分为硬链接和软连接&#xff08;符号连接&#xff09;。 硬链接 Linux中&#xff0c;所有的文件都有一个inode&#xff0c;这个东西就是文件的ID号&#xff0c;硬链接的方式就是通过这个inode来产生新的文件名来建…

公共命名空间和RHP

概述 RHP的全称是&#xff1a;the little Robot that Helped me Program&#xff0c;帮我编程序的小机器人。 RHP必然存在&#xff0c;C语言的宏、C的模板&#xff0c;都是RHP&#xff1b;更复杂的例子&#xff0c;是lex和yacc&#xff0c;它们是制作程序的程序&#xff0c;也…

ChatGPT官网5月14日凌晨1点发布会推出最新GPT4o大模型,贾维斯时刻要来了?

就在今天北京时间2024年5月14日凌晨1点中&#xff0c;OpenAI进行了发布会&#xff0c;这次发布会的内容炸裂&#xff0c;一起来看下吧&#xff01; GPT4o多模态大模型发布 首先公开的是GPT4o多模态大模型的发布&#xff0c;相较于GPT-4turbo速度更快&#xff0c;更便宜。我刚开…

Redis数据结构-RedisObject

1.7 Redis数据结构-RedisObject Redis中的任意数据类型的键和值都会被封装为一个RedisObject&#xff0c;也叫做Redis对象&#xff0c;源码如下&#xff1a; 1、什么是redisObject&#xff1a; 从Redis的使用者的角度来看&#xff0c;⼀个Redis节点包含多个database&#xff…

【Linux】常用指令、热键与权限管理

一、常用指令 &#xff08;1&#xff09;ls 功能&#xff1a;列出指定目录下的所有子目录与文件 用法&#xff1a;ls &#xff08;选项&#xff09; &#xff08;目录或文件名&#xff09; 常用选项&#xff1a; -a&#xff1a;列出目录下的所有文件&#xff0c;包括隐藏…

ubuntu在conda环境中使用 pip install -r requirements.txt但是没有安装在虚拟环境中

whereis pip pip listubuntu在conda环境中使用pip install lpips0.1.3 但是安装在了这里 Requirement already satisfied: lpips0.1.3 in /home/uriky/anaconda3/lib/python3.11/site-packages (0.1.3) 就会出现黄色波浪&#xff0c;未在虚拟环境中安装包 解决办法1&#xff1…

css笔记总结2

找到所有的 h1 标签。 选择器&#xff08;选对人&#xff09; 设置这些标签的样式&#xff0c;比如颜色为红色&#xff08;做对事&#xff09;。 ##css基础选择器 基础选择器又包括&#xff1a;标签选择器、类选择器、id 选择器和通配符选择器 ###标签选择器&#xff1a; 标签…

红黑树底层封装map、set C++

目录 一、框架思考 三个问题 问题1的解决 问题2的解决&#xff1a; 问题3的解决&#xff1a; 二、泛型编程 1、仿函数的泛型编程 2、迭代器的泛型编程 3、typename&#xff1a; 4、/--重载 三、原码 红黑树 map set 一、框架思考 map和set都是使用红黑树底层&…

安装ArcGIS失败,提示无效驱动器Error1327.Invalid Drive G错误

安装ArcGIS的时候&#xff0c;出现图中错误该怎么解决呢&#xff1f; Error 1327.Invalid Drive:G:\ 即错误代码&#xff1a;1327。无效驱动器G盘 出现以上问题的原因是 注册表中包含了该硬盘驱动器或网络驱动器的引用 但是在我的电脑中又没有该盘符 一般是已经卸载或者更换…

2024五月母亲节嘉年华活动方案

2024以花之名 致谢母亲簪花趣味亲子五月母亲节嘉年华活动方案-43P 活动策划信息&#xff1a; 方案页码&#xff1a;43页 文件格式&#xff1a;PPT 方案简介&#xff1a; 岁月温柔治愈 母爱闪闪发光 一年一度的PY圈孝子孝女大赛即将到来 本次母亲节&#xff0c;“以花之名…

Odin:免费轻量化BAS工具,守护企业网络安全新利器!

墨云科技依托多年安全验证经验积累&#xff0c;推出免费轻量化安全验证工具——Odin。墨云Odin安全验证工具从设计上极大的简化了BAS的任务流程&#xff0c;专为企业持续安全运营设计&#xff0c;提供轻量化、全方位的安全策略有效性验证。 Odin提供综合攻击模拟服务&#xff0…