JVM==>图解字节码指令

一,原始代码

我们来看一下执行这段代码的具体流程

那执行这段代码中 JVM就会把已经编译好的.class文件加载到内存中,交给CPU运行 

 1)常量池载入运行时常量池

我们发现 10 并没有被存入常量池中, 这是因为short范围以内的数字不会放到常量池中的, 直接进入存入方法区

short.MAX_VALUE = 32767

2)方法字节码载入方法区

3)main线程开始运行

根据常量池,方法区提供的信息,确定操作数栈深度为2,局部变量表的长度为4就足够用了, 避免浪费

4)执行引擎开始执行字节码 

 

 

 

getstatic #4. 表示获取System.out 的静态字段, 该静态字段的类型为java.io.PrintStream。该指令执行完成后,操作数栈顶存放的就是System的out静态字段的引用

iload3 把局部变量表第3个位置的元素加载到操作数栈上

注意: 下图堆上没有这个System.out对象, 图错了

执行完成后,弹出println栈帧,并清空main操作数栈

5)return操作

最后return 操作, 弹出main栈帧

 二, 经典问题i++

首先说一下,       不管是 i++ 还是++i, 都是首先对局部变量表上的那个值进行自增 其次再返回i, 但是区别在于, i++ 是返回操作数栈上的值, ++i 是返回局部变量表上的值

iinc 1,1

第二个iinc 1,1  这个就是第二a在++

 

执行iload_1.    准备做第一次+

 

第2次 + 

  

 

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

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

相关文章

如何有效进行测试执行进度计划

测试执行通常都是处于软件测试生命周期的关键路径上,它不仅在测试过程中占有重要的地位,并且也会花费大量的测试时间。针对测试执行而进行的计划,即测试执行进度计划,是进行测试执行进度控制的基础。在进行测试执行进度计划制订的…

Web APIs—介绍、获取DOM对象、操作元素内容、综合案例—年会抽奖案例、操作元素属性、间歇函数、综合案例—轮播图定时器版

版本说明 当前版本号[20231204]。 版本修改说明20231204初版 目录 文章目录 版本说明目录复习变量声明 Web APIs - 第1天笔记介绍概念DOM 树DOM 节点document 获取DOM对象案例— 控制台依次输出3个li的DOM对象 操作元素内容综合案例——年会抽奖案例操作元素属性常用属性修改…

【以太网物理层】DM9161A

🚩 WRITE IN FRONT 🚩 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评百大…

我有才知识付费平台搭建,一分钟搭建你的专属知识服务平台

一站式线上线下课程传播 丰富的内容展示形式,满足用户不同层次的学习需求,提高流量转化 支持音频、视频、电子书、图文、动态等多模式课程展示形式,同时还支持免费、VIP会员、独立付费等多种服务方式,满足不同渠道场景推广&…

前端入口教程_web01

web标准 记得看! html:表示整个页面 head: titile: body: 常用标签 1.标题标签 2.段落标签 3.换行标签 4.文本格式化标签 5. 和 标签 6.图像标签 相对路径–用来插自己本地的图片 #### 绝对路径–用来插网上找的图…

【短文】用ssh连接服务器时,怎么指定账户名

2023年12月4日,周一晚上 要在 SSH 连接中指定账户名,可以使用以下命令格式: ssh usernameserver_ip 其中,username 是要连接的服务器上的账户名,server_ip是服务器的 IP 地址或主机名。 例如,如果要使用…

天池XGBoost,重写柱状图代码

天池XGBoost 地址 重写柱状图代码:我没考虑复杂度,只考虑直观理解 原文统计地点是否降雨来画柱状图实在是太麻烦了,我重写了一下。最麻烦的就是数据处理。我的思路是: 首先取下雨的全部数据data[data[RainTomorrow] Yes] 然后…

SQL Server 数据库,创建数据表(使用T-SQL语句)

2.3表的基本概念 表是包含数据库中所有数据的数据库对象。数据在表中的组织方式与在电子表格中相似,都是 按行和列的格式组织的,每行代表一条唯一的记录,每列代表记录中的一个字段.例如,在包含公 司员工信息的表中,每行…

Radix Tree用法

目录 一、radix tree定义二、radix tree操作参考资料 一、radix tree定义 对于长整型数据的映射,如何解决Hash冲突和Hash表大小的设计是一个很头疼的问题。 radix树就是针对这种稀疏的长整型数据查找,能快速且节省空间地完成映射。借助于Radix树&#x…

数组实现循环队列(增设队列大小size)

目录 一、前言 1.如何实现循环? 2.如何判断队列为空? 3.如何判断队列为满? 二、循环队列的结构定义 三、循环队列的创建及其初始化 四、入队 五、出队 六、取队头元素 七、取队尾元素 八、循环队列判空 九、循环队列判满 十、循环…

虾皮数据分析网站:了解Shopee市场趋势与优化运营的利器

在如今的电商时代,越来越多的人选择在虾皮购物(Shopee)平台上开设自己的店铺。然而,要在这个竞争激烈的市场中脱颖而出并取得成功,并不是一件容易的事情。为了更好地了解市场趋势、优化产品和店铺运营,了解…

Java面试题(每天10题)-------连载(40)

目录 Mysql篇 1、表中有大字段X(例如:text类型),且字段X不会经常更新,将该字段拆成子表好处是什么? 2、Mysql中InnoDB引擎的行锁是通过加载什么上完成的? 3、Mysql中控制内存分配的全局参数…

功能需求与程序的关系

确定程序的输入和输出:根据功能需求,确定程序的输入数据和输出结果。这有助于我们明确程序的功能和实现方式。设计程序的算法和逻辑:根据功能需求,设计程序的算法和逻辑。这包括确定程序的数据结构、流程控制和算法实现等方面。划…

使用GDBdeug调试QNX程序

使用GDBdeug调试QNX程序 远程调试 启动GDB,比如我的host是x86_64平台,因此: ./qnx/qos223/host/linux/x86_64/usr/bin/x86_64-pc-nto-qnx7.1.0-gdb 连接远程设备,比如雷达: target qnx 172.168.1.10:8000 设置远程工…

​ 华大基因发布《2023年全球地中海贫血认知现状报告》

在地中海沿岸地区、非洲、中东、东南亚和中国南部,一种名为地中海贫血(以下简称“地贫”)的遗传性血红蛋白疾病十分高发,已成为严重危害公共健康和社会稳定的重大问题。近日,华大基因发布《2023年全球地中海贫血认知现…

鸿蒙系统扫盲(四):鸿蒙使用的是微内核?

我们常说,看一个系统是不是自研,就看它的内核,常见的内核分为:宏内核和微内核,当然还有两者结合体,他们到底有什么区别? 1.白话宏内核和微内核 有一天,你结婚了,你和你…

微机原理9

一、单项选择题(本大题共15小题,每小题3分、共45分。在每小题给出的四个备选项中,选出一个正确的答案,请将选定的答案填涂在答题纸的相应位置上。) 8088 系统的内存最大容量为 16MB. 其地址总线为() A. 16 位 B. 20 位 C. 24 位 D. 32 位 2,以CPU为核心…

Java题4:关于java的选择题简答题及答案

题目1:Java中的基本数据类型不包括以下哪种类型? A. double B. string C. char D. boolean 答案:B. string 题目2:以下哪个关键字用于定义一个类? A. class B. interface C. extends D. implements 答案:A…

2023年12月4日:多继承

代码 #include <iostream>using namespace std;class Sofa { private:string sit;int *len; public:Sofa(){cout << "Sofa::无参构造函数" << endl;}Sofa(string sit,int len):sit(sit),len(new int(len)){cout << "Sofa::有参构造函数…

Flutter 开发入门文章汇总

官网文档很详细&#xff0c;搭建环境和学习组件基本可以参考 官网文档 上拉加载和下拉刷新 Flutter 上拉加载和下拉刷新 - 掘金 gradle flutter配置gradle&#xff08;个人笔记&#xff0c;非教程&#xff09;_flutter gradle_追寻着星星的方向的博客-CSDN博客 gradle下载…