2. 字节码指令

2. 字节码指令

2.1 入门

public cn.itcast.jvm.t5.HelloWorld();构造方法的字节码指令

​ 2a b7 00 01 b1

  1. 2a=> aload_0加载slot 0的局部变量,即this,做为下面的invokespecial 构造方法调用的参数
  2. b7 =>invokespecial预备调用构造方法,哪个方法呢?
  3. 00 01引用常量池中#1项,即【Method Java/lang/Object.""😦)V】
  4. b1表示返回(return)

另一个是public static void main(java.lang.String[]);主方法的字节码指令

​ b2 00 02 12 03 b6 00 04 b1

  1. b2=>getstatic 用来加载静态变量,哪个静态变量呢?(System.out)
  2. 00 02引用常量池中#2项,即【Fied java/lang/System.out:Ljava/io/PrintStream;】
  3. 12=>ldc 加载参数,哪个参数呢?(hello world常量)
  4. 03引用常量池中#3项,即【String hello world】
  5. b6=>invokirtual 预备调用成员方法,哪个方法呢?(println(String)V
  6. 00 04引用常量池中#4项,即【Method java/io/PrintStream.println:(Ljava/lang/String;)V】
  7. b1表示返回

2.2javap工具

Oracle提供了javap工具来反编译class文件

请添加图片描述
请添加图片描述

请添加图片描述

请添加图片描述

2.3图解方法执行流程

(1)原始Java代码

package cn.itcast.jvm.t3.bytecode;
/**
*演示 字节码指令 和 操作数栈、常量池的关系
*/
public class Demo3_1{public static void main(String[] args){int a=10;int b=Short.MAX_VALUE+1;int c=a+b;System.out.println(c);}
}

(2)编译后的字节码文件

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

(3)常量池载入运行时常量池

请添加图片描述

(4)方法字节码载入方法区

请添加图片描述

(5)main线程开始运行,分配栈帧内存

(stack=2,locals=4)

请添加图片描述

(6)执行引擎开始执行字节码

bipush 10

  • 将一个byte压入操作数栈(其长度会补齐4个字节),类似的指令还有
  • sipush将一个short压入操作数栈(其长度会补齐4个字节)
  • ldc将一个int压入操作数栈
  • ldc2_w将一个long压入操作数栈(分两次压入,因为long是8个字节)
  • 这里小的数字都是和字节码指令存在一起,超过short范围的数字存入了常量池

请添加图片描述

istore_1

  • 将操作数栈顶数据弹出,存入局部变量表的slot 1

请添加图片描述

请添加图片描述

ldc #3

  • 从常量池加载#3数据到操作数栈
  • 注意Short.MAX_VALUE是32767,所有32768=Short.MAX_VALUE+1实际是在编译期间计算好的

请添加图片描述

istore_2

请添加图片描述

请添加图片描述

iload_1

请添加图片描述

iload_2

请添加图片描述

iadd

请添加图片描述

请添加图片描述

istore_3

请添加图片描述

请添加图片描述

getstatic #4

请添加图片描述

请添加图片描述

iload_3

请添加图片描述

请添加图片描述

invokevirtual #5

  • 找到常量池#5项
  • 定位找到方法区Java/io/PrintStream.println:(I)V方法
  • 生成新的栈帧(分配locals、stack等)
  • 传递参数,执行新栈帧中的字节码

请添加图片描述

  • 执行完毕,弹出栈帧
  • 清除main操作数栈内容
    请添加图片描述

return

  • 完成main方法调用,弹出main栈帧
  • 程序结束

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

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

相关文章

它是真实的“盗梦空间”?在这里,一切都可能是数据

阿里妹导读:位于杭州阿里巴巴西溪园区旁边的大型商场“亲橙里”2018年正式开业。和传统的线下综合型商场不同的是,亲橙里从规划之初就定位为数字化商场,通过植入自研的IBOS平台完成建筑内的所有子系统的接入,而让建筑和建筑内的设…

BDS-HA:构建高可用、低延迟的HBase服务

HBase可以支持百TB数据规模、数百万QPS压力下的毫秒响应,适用于大数据背景下的风控和推荐等在线场景。阿里云HBase服务了多家金融、广告、媒体类业务中的风控和推荐,持续的在高可用、低延迟、低成本方向上进行优化。目前单集群承诺可用性99.9%&#xff0…

layui 表单动态添加、删除input框

html部分 <div class"layui-form-item" ><label class"layui-form-label">路线</label><div class"layui-input-block" id"last"><div class"layui-input-inline">{empty name"$ways&q…

MySQL 可重复读,差点就让我背上了一个 P0 事故!

来源 |程序通事责编 | Carol封图 | CSDN 付费下载自视觉中国P0 事故&#xff1a;余额多扣&#xff01;这是一个真实的生产事件&#xff0c;事件起因如下&#xff1a;现有一个交易系统&#xff0c;每次产生交易都会更新相应账户的余额&#xff0c;出账扣减余额&#xff0c;入账增…

AliOS Things 3.0应用笔记:摄像头配网 + 钉钉群通知 + 天气显示

给AliOS Things一颗STAR 目录 运行流程效果展示 操作流程 环境配置源码结构配置烧录运行 源码讲解 QR扫码部分GUI部分https client部分 运行流程 本示例有如下3个功能&#xff1a; 摄像头配网。推送消息到钉钉群。显示当天天气。操作流程 环境配置 AliOS Things环境安装&a…

与阿里合伙人合影,两年净赚一百万,这个草根姑娘有什么魔力?

大学肄业&#xff0c;网店关闭&#xff0c;公司转手&#xff0c;人生的下一步要怎么走&#xff1f;张昕总沉浸在自己的世界里发呆。 直到两年前&#xff0c;张昕随手往几个群里转发了“购买阿里云服务器”的折扣幸运券&#xff0c;半年后&#xff0c;因订单数量排进前十&#…

借助大数据进行社交媒体营销,企业们得这么玩!

作者 | Annie Qureshi译者 | 火火酱&#xff0c;责编 | Carol出品 | CSDN 云计算&#xff08;CSDNcloud&#xff09;封图 | CSDN 付费下载自视觉中国自上世纪80年代以来&#xff0c;“数据”一词就一直是互联网行业的重要术语。随着人们对数字领域的关注度越来越高&#xff0c;…

聊一聊DNS劫持那些事

作为《DNS攻击防范科普系列》的最后一篇&#xff0c;今天我们来好好聊聊DNS劫持。先回顾一下DNS劫持的概念&#xff1f;DNS劫持即通过某种技术手段&#xff0c;篡改正确域名和IP地址的映射关系&#xff0c;使得域名映射到了错误的IP地址&#xff0c;因此可以认为DNS劫持是一种D…

nacos集成dubbo实现远程服务调用多服务端2

文章目录一、版本选取、需求和项目简述1. 版本选取2. 项目模块说明2. 需求说明二、需求实战-依赖初始化2.1. 创建maven父工程EShopParent2.2. 创建子模块DubboApi2.3. 创建服务端Stock-serv2.4. 创建服务端product-serv2.5. 创建消费端端Order-serv三、需求实战-代码编写3.1. 创…

避开这2个误区,测试目标 KPI 不再难设

阿里妹导读&#xff1a;好的开始是成功的一半&#xff01;工作中&#xff0c;目标的设置是最不能马虎的事情。今天&#xff0c;我们请来孙阳&#xff08;阿里巴巴测试开发专家&#xff09;&#xff0c;他从11年入职至今已有8年。在测试技术目标的KPI设置上&#xff0c;他有一些…

程序员工作3年只涨2千,你不知道程序员有多难!

最近在职业论坛看到这样一个热门的帖子&#xff1a;工作3年&#xff0c;薪资涨了2k。大家都在吐槽公司的不公&#xff0c;却忽略了从另一个角度看待问题&#xff1a;是不是因为我们本身做的不够好&#xff1f;越来越发现&#xff0c;很多人之所以很久没有涨薪&#xff0c;是因为…

蚂蚁金服OceanBase挑战TPCC丨TPC-C基准测试之链路层优化

导语 在 TPC-C 标准定义中&#xff0c;测试系统分为 RTE&#xff08;Remote Terminal Emulator&#xff09;和 SUT 两部分。在实际的 TPC-C 测试流程中&#xff0c;不只是对 DB 端能力的考验&#xff0c;对链路中的所有组件都存在极大的资源消耗和压力。以这次 6088万 tpmC 测…

由于找不到msvcp140.dll无法继续执行代码

下载安装微软常用运行库合集即可解决 https://www.cr173.com/soft/106037.html

知己知彼,百战百胜!如何做好干系人管理

作者|章冀灶(晟远) 出品|阿里巴巴新零售淘系技术部 众所周知&#xff0c;高效的沟通是项目成败重要的影响因素。沟通在项目管理过程中扮演了极其重要的作用&#xff0c;而沟通对象又是完整的基于项目干系人&#xff0c;所以在项目管理过程中干系人管理就显得尤为重要&#xff…

彻底弄懂为什么不能把栈上分配的数组(字符串)作为返回值

背景 最近准备一个教程&#xff0c;案例的过程中准备了如下代码碎片&#xff0c;演示解析http scheme #include <stdio.h> #include <stdlib.h> #include <string.h>char *parse_scheme(const char *url) {char *p strstr(url,"://");return st…

健壮F.T.+新裸金属重磅发布!全新升级版ZStack加速新基建!

6月2日&#xff0c;以“健壮F.T.新裸金属 新基建下的新IaaS”为主题的2020年ZStack新品线上超级发布会引爆了企业级云市场。面向新基建发展契机&#xff0c;致力于普惠云计算的ZStack与英特尔、阿里云等伙伴强势携手发布2大重磅新品&#xff1a;首个采用了F.T.技术的ZStack Min…

使用datax同步cassandra数据

DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台&#xff0c;实现各种异构数据源之间高效的数据同步功能。最近&#xff0c;阿里云cassandra团队为datax提供了cassandra读写插件&#xff0c;进一步丰富了datax支持的数据源&#xff0c;可以很方便实现cassandra之间以…

整理了一份 Docker系统知识,从安装到熟练操作看这篇就够了 | 原力计划

作者 | IronmanJay责编 | 王晓曼出品 | CSDN博客Docker 基础介绍下图为 Docker 图标&#xff08;是一个鲸鱼上面是集装箱&#xff09;。1、我们为什么要使用Docker当我们在工作中&#xff0c;一款产品从开发设计到上线运行&#xff0c;其中需要开发人员和运维工程师&#xff0c…

阿里巴巴的云原生与开发者

摘要&#xff1a;利用云原生技术构建应用简便快捷&#xff0c;部署应用轻松自如&#xff0c;运行应用按需伸缩。如今&#xff0c;云原生已经成为下一代技术发展的趋势。在 2019 杭州云栖大会开发者峰会上&#xff0c;阿里巴巴资深技术专家李响就为大家分享了阿里巴巴的云原生技…

(企业案例)使用Nacos持久化规则,改造sentinel-dashboard

文章目录一、前言1. 版本选取2. 克隆代码3. 导入 IDEA二、全局修改2.1. 修改 POM2.2. 修改配置文件三、后端代码修改3.1. 包结构部分3.2. nacos 配置文件四、创建规则与 Nacos 交互类4.1. 创建授权规则与 Nacos 交互类4.2. 创建降级规则与 Nacos 交互类4.3. 创建流控规则与 Nac…