方法区使用举例

2023-05-16

public class MethodAreaDemo {
    public static void main(String[] args) {
        int x = 500;
        int y = 100;
        int a = x / y;
        int b = 50;
        System.out.println(a + b);
    }
}

Copy to clipboardErrorCopied
字节码


public class com.atguigu.java1.MethodAreaDemo
  minor version: 0
  major version: 51
  flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
   #1 = Methodref          #5.#24         // java/lang/Object."<init>":()V
   #2 = Fieldref           #25.#26        // java/lang/System.out:Ljava/io/PrintStream;
   #3 = Methodref          #27.#28        // java/io/PrintStream.println:(I)V
   #4 = Class              #29            // com/atguigu/java1/MethodAreaDemo
   #5 = Class              #30            // java/lang/Object
   #6 = Utf8               <init>
   #7 = Utf8               ()V
   #8 = Utf8               Code
   #9 = Utf8               LineNumberTable
  #10 = Utf8               LocalVariableTable
  #11 = Utf8               this
  #12 = Utf8               Lcom/atguigu/java1/MethodAreaDemo;
  #13 = Utf8               main
  #14 = Utf8               ([Ljava/lang/String;)V
  #15 = Utf8               args
  #16 = Utf8               [Ljava/lang/String;
  #17 = Utf8               x
  #18 = Utf8               I
  #19 = Utf8               y
  #20 = Utf8               a
  #21 = Utf8               b
  #22 = Utf8               SourceFile
  #23 = Utf8               MethodAreaDemo.java
  #24 = NameAndType        #6:#7          // "<init>":()V
  #25 = Class              #31            // java/lang/System
  #26 = NameAndType        #32:#33        // out:Ljava/io/PrintStream;
  #27 = Class              #34            // java/io/PrintStream
  #28 = NameAndType        #35:#36        // println:(I)V
  #29 = Utf8               com/atguigu/java1/MethodAreaDemo
  #30 = Utf8               java/lang/Object
  #31 = Utf8               java/lang/System
  #32 = Utf8               out
  #33 = Utf8               Ljava/io/PrintStream;
  #34 = Utf8               java/io/PrintStream
  #35 = Utf8               println
  #36 = Utf8               (I)V
{
  public com.atguigu.java1.MethodAreaDemo();
    descriptor: ()V
    flags: ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Object."<init>":()V
         4: return
      LineNumberTable:
        line 7: 0
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       5     0  this   Lcom/atguigu/java1/MethodAreaDemo;

  public static void main(java.lang.String[]);
    descriptor: ([Ljava/lang/String;)V
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=5, args_size=1
         0: sipush        500
         3: istore_1
         4: bipush        100
         6: istore_2
         7: iload_1
         8: iload_2
         9: idiv
        10: istore_3
        11: bipush        50
        13: istore        4
        15: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
        18: iload_3
        19: iload         4
        21: iadd
        22: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V
        25: return
      LineNumberTable:
        line 9: 0
        line 10: 4
        line 11: 7
        line 12: 11
        line 13: 15
        line 14: 25
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0      26     0  args   [Ljava/lang/String;
            4      22     1     x   I
            7      19     2     y   I
           11      15     3     a   I
           15      11     4     b   I
}
SourceFile: "MethodAreaDemo.java"
Copy to clipboardErrorCopied

图解字节码指令执行流程
1、初始状态
在这里插入图片描述

2、首先将操作数500压入操作数栈中
在这里插入图片描述

3、然后操作数 500 从操作数栈中取出,存储到局部变量表中索引为 1 的位置
在这里插入图片描述

4、将操作数100压入操作数栈中
在这里插入图片描述

5、然后操作数 100 从操作数栈中取出,存储到局部变量表中索引为 2 的位置

在这里插入图片描述

6、读取本地变量 1 ,压入操作数栈
在这里插入图片描述

7、读取本地变量 2 ,压入操作数栈
在这里插入图片描述

8、两数相除,计算结果放在操作数栈顶,之后执行 istore_3 指令,将计算结果从操作数栈中弹出,存入本地变量表 3 中
在这里插入图片描述

9、将操作数 50 压入操作数栈
在这里插入图片描述

10、将操作数 50 从栈顶弹出,保存在局部变量表 4 中
在这里插入图片描述

11、获取 System.out 输出流的引用
在这里插入图片描述

12、将本地变量表 3 的值取出,压入操作数栈中,准备进行加法运算
在这里插入图片描述

13、将本地变量表 4 的值取出,压入操作数栈中,准备进行加法运算
在这里插入图片描述

15、执行加法运算后,将计算结果放在操作数栈顶
在这里插入图片描述

调用静态方法 println( ) ,输出加法结果
在这里插入图片描述

16、main( ) 方法执行结束
在这里插入图片描述

关于【符号引用 --> 直接引用】的理解

上面代码调用 System.out.println() 方法时,首先需要看看 System 类有没有加载,再看看 PrintStream 类有没有加载
如果没有加载,则执行加载,执行时,将常量池中的符号引用(字面量)转换为运行时常量池的直接引用(真正的地址值)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

方法区使用举例 的相关文章

  • Can‘t find a suitable configuration file in this directory or any parent. 报错解决错误

    docker compose 执行的时候报错 Can 39 t find a suitable configuration file in this directory or any parent Are you in the right
  • ST-GCN训练自建数据集

    参考了许多博文 xff0c 慢慢地也就把st gcn跑出来了 xff0c 参考的文章一会附在文章里面 xff0c 实测有用 1 安装st gcn 复现STGCN CPU版 xff08 ubuntu16 04 43 pytorch0 4 0
  • 复现STGCN CPU版 (ubuntu16.04+pytorch0.4.0+openpose+caffe)

    前提 xff1a ubuntu下将python3 5 2设为默认 xff08 百度 xff09 一 下载stgcn xff08 gitbub上fork后导入到gitee快些 xff09 st gcn Spatial Temporal Gra
  • python新建txt文件,并逐行写入数据

    python2新建txt文件 xff0c 并逐行写入数据 coding 61 utf 8 import os txtName 61 34 codingWord txt 34 f 61 file txtName 34 a 43 34 for
  • SQLServer 調用 WebAPI [WSDL]

    某陌習慣調用ASMX文件 xff0c 開發語言最近比較常用C 結果這次合作的同事習慣用Python xff0c 還強調只會用REST風格的WebService 某陌心想這不是WebAPI嗎 xff1f 趕緊學習 正式引入WebAPI之前先簡
  • 知识图谱(Knowledge Graph, KG)(王昊奋老师-课程学习笔记)

    主要内容 xff1a 1 知识图谱的概念 2 典型知识库介绍 xff08 简 xff09 3 知识图谱技术概览 4 典型案例简介 知识图谱 KG 的概念 知识图谱 KG 得益于Web的发展 xff08 更多的是数据层面 xff09 xff0
  • Boa+CGI环境搭建笔记

    转自 xff1a https www sfantree com boa web cgi utm source 61 tuicool amp utm medium 61 referral BOA看了 xff0c CGI 原理也大概了解 现在要
  • 2021 CondaHTTPError: HTTP 000 CONNECTION FAILED for url 的问题终极解决方案

    一 首先执行命令 xff0c 查看自己的镜像源 conda config show channels 二 可以首先删除已经存在的镜像源 xff08 注 xff1a 上述三个镜像源无需删除 xff01 xff01 xff01 xff09 xf
  • K8s bridge、ip分配原理

    一个Blog jerichoking wtf 自建网站欢迎来戳 一 项目地址 GitHub containernetworking plugins Some reference and example networking plugins
  • RT-Thread系统的SysTick和pendSV的中断优先级

    问题描述 xff1a SysTick和pendSV的中断优先级分别设置为0和15 SysTick中断用于系统心跳 pendSV中断用于任务调度 代码证明 xff1a RT Thread中设置pendSV中断优先级的代码在cpu文件夹下con
  • curl的安装

    window下 xff1a 开启curl的步骤 span class hljs number 1 span 在localhost站点下输出一下phpinfo xff0c 以此来检测php ini的所在 xff08 因为我在开启CURL的时候
  • Hive DDL常见操作

    文章目录 Hive中DDL的使用Hive数据库介绍Hive数据库的操作Hive创建表操作数据类型分隔符指定默认分隔符创建表的示例 Hive show语法 Hive数据模型图 Hive中DDL的使用 Hive SQL xff08 HQL xf
  • 判断两个ip地址是否属于同一子网

    include lt stdio h gt include lt string h gt include lt stdlib h gt 功能 判断两台计算机IP地址是同一子网络 原型 xff1a int checkNetSegment ch
  • 做一个程序媛

    高考过去 xff0c 又一届的本科小鲜肉也毕业了 xff0c 办公室里面的实习生也换了一批 xff0c 忽然间有一点感慨 xff0c 转眼间 xff0c 也做了一年的程序猿了呀 这两天csdn从高考的程序员正巧在征文 xff0c 我也来蹭一
  • Ubuntu 进不了图形界面 硬盘文件系统错误 /dev/sda1 :clean...只有命令界面 give root password for maintaince. or press contro

    故障原因 xff1a 非法关机 xff0c 造成文件系统损坏 现象 xff1a 如题 xff0c 开机可以进入grub xff0c 但是任何选项都是无法进入图形界面 recovery 模式下选择菜单也无响应 正常开机只能进入如下图的状态 网
  • 花开两朵 天各一方

    他和她最后一次见面 xff0c 大约是四年前的毕业季 xff0c 分别的场景似乎已经模糊了 xff0c 但她临别的那句 到了深圳照顾好自己 xff0c 等国庆了我就去看你 却将美好的青春永远的定格在了那黄昏的站台 他和她相识是在十一年前的开
  • 嵌入式平台安装pandas以及其他包常见问题解决

    1 在嵌入式平台例如树莓派上安装python包常见问题解决 xff1a 问题1 xff1a 在使用pip进行安装pandas的时候 xff0c 安装完成之后在终端输入python3 然后导入pandas时出错 出现这个问题的最大原因就是pi
  • 从高考到程序员

    转瞬之间 xff0c 大四也已经结束了 天气晴朗 xff0c 毕业典礼上也人声鼎沸 xff0c 让我不禁想起了四年前 xff0c 高考结束大家急忙收拾东西逃离校园参加班级聚餐的情形 xff0c 与今日独自回宿舍最后清理一遍行李箱后拖着就走的
  • CAS学习笔记(三):认证中心返回多属性配置

    概述 cas server默认的可用信息只有用户名 xff0c 如果我还想知道他的角色类型等其它属性 xff0c 这时候就需要做一些配置了 其它代码编写代码方式这里不做介绍 xff0c 只做简单配置的方式介绍 配置操作 1 cas serv

随机推荐

  • 研究生语音识别课程作业记录(三) 非特定人孤立词识别

    研究生语音识别课程作业记录 xff08 三 xff09 非特定人孤立词识别 前言一 任务要求二 识别方法三 语音数据库四 特征参数提取五 识别过程及分析六 实验总结七 小结 前言 研究生期间的语音识别课程作业记录 xff0c 研一暑假的主要
  • 文献查找几种方法

    这几天忙着统计学院院长的一些个人研究成果 xff0c 其中要对每条研究标明相关的信息 xff0c 找到了一些途径 xff0c 可以留个备用 1 专著 1 xff09 专著估计最不好找的要算出版日期了 xff0c 所以下次要用的话 xff0c
  • Debian 11 KDE Plasma桌面环境,编译Fcitx5(只编译,不安装)

    Debian 11 KDE Plasma桌面环境 xff0c 编译Fcitx5 xff08 只编译 xff0c 不安装 xff09 安装依赖的工具和库 安装前需要检查电脑上是不是具备这些工具 xff0c 或者库 xff08 这是我根据实际情
  • 快速解决 vsftpd nologin 虚拟用户 拒绝访问 无法登录

    搭建好了vsftpd服务之后 xff0c 新建了一个nologin虚拟用户 xff0c 然而在另一台win7上用WinSCP连接ftp时提示错误 useradd d home ftp s sbin nologin ftpUser1 pass
  • 云计算的部署

    一 云计算的服务和交付模式 基础设施即服务 xff08 Iaas xff09 平台即服务 xff08 Paas xff09 软件即服务 xff08 Saas xff09 衍生出 xff1a 存储即服务 数据库即服务 安全即服务 通信即服务
  • MapReduce的数据流程、执行流程

    MapReduce的大体流程是这样的 xff0c 如图所示 xff1a 由图片可以看到mapreduce执行下来主要包含这样几个步骤 1 首先对输入数据源进行切片 2 master调度worker执行map任务 3 worker读取输入源片
  • 免费下载中国知网、万方学术论文的几种方法(福利合集)

    在国内 xff0c 中国知网收录了最多的期刊论文和硕博士论文 无论学霸学渣 xff0c 都得上去下载论文 如果你的学校在知网购买了相应的下载版权 xff0c 那恭喜你 xff0c 你通过校园网就能免费下载了 但一旦你回了家 xff0c 或学
  • 使用apt离线安装deb包

    文章目录 apt 下载的deb路径阻止apt自动删除缓存文件的方法只下载不安装的方法离线安装deb包离线安装gcc1 下载依赖2 打包下载的deb文件 xff0c 上传到没有外网连接的服务器3 安装deb包 apt 下载的deb路径 默认存
  • haar分类

    今天说一说haar分类算法 首先介绍haar like特征 haar like的特征有边缘特征 线性特征 中心特征和对角线特征 我们使用特征模板来表示特征的计算 xff0c 如图所示 xff1a 这些特征分别对应着不同的矩阵以便于进行计算
  • POI window excel 打开提示部分内容有问题, 是否尝试尽量恢复

    问题如下 window excel 打开报错如下 但是WPS打开正常 问题在于 window excel 冻结窗口只能设置一行 WPS可以设置多行 设置冻结窗口如下 冻结第一行 sheet createFreezePane 0 1 0 1
  • 解决从数据库中取出json数据有转义符

    不处理从数据库取出数据如下 String s1 61 34 34 MsgId 34 1 34 TotalCount 34 10 34 FilterCount 34 8 34 SentCount 34 7 34 ErrorCount 34 0
  • 查询数据报错 com.mysql.cj.exceptions.DataConversionException

    com mysql cj exceptions DataConversionException Caused by java sql SQLDataException Cannot determine value type from str
  • 微信调用接口报错:"errcode":45009,"errmsg":"reach max api daily quota limit hints:

    api请求次数达到最大上限 每个帐号每月共10次清零操作机会 xff0c 清零生效一次即用掉一次机会 xff08 10次包括了平台上的清零和调用接口API的清零 xff09 https developers weixin qq com do
  • @FeignClient注解 中属性 contextId使用

    64 FeignClient注解 中属性 contextId 比如我们有个user服务 xff0c 但user服务中有很多个接口 xff0c 我们不想将所有的调用接口都定义在一个类中 xff0c 比如 xff1a Client span c
  • toString和toJSONString的区别

    Map span class token generics function span class token punctuation lt span String span class token punctuation span Int
  • Neutron运营商网络和租户网络详解

    由租户创建并且管理的网络 xff0c Neutron称之为租户网络 但是Openstack不是万能的 xff0c Neutron也不是万能的 还有很多网络不在Neutron管理范围内 xff08 Neutron称之为外部网络 xff09 有
  • mysql in查询太慢, 使用join优化

    mysql中查询 in 参数太多 导致查询很慢 使用join优化 在实例中in查询话费2s 优化后0 4s span class token keyword SELECT span span class token operator spa
  • Springboot 多数据源事务,切换数据源+事务

    项目有多个数据源 根据配置文件配置的连接数来自动生成多数据源配置 并且使用 aop切换数据源 使用的是 AbstractRoutingDataSource 重写 determineCurrentLookupKey 方法 在切换数据源之前 6
  • Redisson自定义序列化方式

    redissonClient span class token punctuation span span class token function getBucket span span class token punctuation s
  • 方法区使用举例

    span class token keyword public span span class token keyword class span span class token class name MethodAreaDemo span