教你快速阅读java简单字节码

news2024/11/29 0:41:21

我们举例代码

public class Read {
    public static void main(String[] args) {
        int a=20;
        int b=30;
        a+=1;
        b+=15;
        System.out.println((a+b)/2);

    }

}

我们将他进行运行,我们就会在target

里面出现.class文件,我们需要进入

执行这个代码

javap -c Read.class

 就会出现字节码

  public static int cal();
    Code:
       0: bipush        20
       2: istore_0
       3: bipush        30
       5: istore_1
       6: iinc          0, 1
       9: iinc          1, 15
      12: iload_0
      13: iload_1
      14: iadd
      15: iconst_2
      16: idiv
      17: ireturn
}

 解读:

  public static int cal();
    Code:
       0: bipush        20     //将常量值20压入操作数栈。这表示将整数值20放入栈顶
       2: istore_0             //将操作数栈顶的值存储到局部变量0(即a)。即将栈顶的值20弹//出,并存储到变量a中。
       3: bipush        30     //将常量值30压入操作数栈。这表示将整数值30放入栈顶。
       5: istore_1             //操作数栈顶的值存储到局部变量1(即b)。即将栈顶的值30弹出,//并存储到变量b中。
       6: iinc          0, 1   //将局部变量0(即a)的值自增1。这意味着将变量a的值增加1。
       9: iinc          1, 15  // 将局部变量1(即b)的值增加15。这意味着将变量b的值增加15。
      12: iload_0              //将局部变量0(即a)的值加载到操作数栈顶。即将变量a的值压入//栈顶。
      13: iload_1              //将局部变量1(即b)的值加载到操作数栈顶。即将变量b的值压入//栈顶。
      14: iadd                //对栈顶的两个整数值进行相加。将栈顶的两个值相加,并将结果放入栈顶,然后将a,b的值从操作栈中弹出
      15: iconst_2            //将常量值2压入操作数栈。这表示将整数值2放入栈顶。
      16: idiv                // 对栈顶的两个整数值进行整数除法运算。将栈顶的整数除以次栈顶的整数,并将结果放入栈顶。    //: 从当前方法返回栈顶的整数值作为结果
      17: ireturn
}

以及贴下学习链接
 

个人认为看过的里面最说人话的 

友情感谢:两张图让你快速读懂JVM字节码指令 - 知乎 (zhihu.com)

 

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

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

相关文章

【ICN综述】信息中心网络隐私安全

ICN基本原理: 信息中心网络也是需要实现在不可信环境下可靠的信息交换和身份认证 信息中心网络采用以数据内容为中心的传输方式代替现有IP 网络中以主机为中心的通信方式,淡化信息数据物理或逻辑位置的重要性,以内容标识为代表实现数据的查找…

基于java+springboot+vue城市轨道交通线路查询系统-公交车线路查询

项目介绍 本系统是针对目前交通管理的实际需求,从实际工作出发,对过去的市轨道交通线路查询系统存在的问题进行分析,完善用户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准确率…

webgoat-(A1)injection

SQL Injection (intro) SQL 命令主要分为三类: 数据操作语言 (DML)DML 语句可用于请求记录 (SELECT)、添加记录 (INSERT)、删除记录 (DELETE) 和修改现有记录 &#xff…

随机微分方程的分数扩散模型 (score-based diffusion model) 代码示例

随机微分方程的分数扩散模型(Score-Based Generative Modeling through Stochastic Differential Equations) 基于分数的扩散模型,是估计数据分布梯度的方法,可以在不需要对抗训练的基础上,生成与GAN一样高质量的图片。…

【JavaEE初阶】 UDP服务器与客户端的搭建

文章目录 🌳前言🌲DatagramSocket API🎄DatagramPacket API🍀InetSocketAddress API🎍回显客户端与服务器📌建立回显服务器📌回显客户端📌成果展示 🎋翻译小助手服务器与…

NTFS文件系统解析(三)

1、引言 对于NTFS文件系统而言,无论文件内容本身,抑或真实的文件属性,都被称之为属性。 而正如前文说到的,NTFS预定义了16种属性用于文件系统的管理。 而通常情况下,往往只需要关注其中的某些属性即可。 2、属性头 …

用户自定义消息及层次划分

有些人对术语 WM_USER 表示消息范围基的名称有不同的意见,因为 WM_USER 是由窗口类的实现者来定义的。他们抱怨的是,用户不能使用它们,因为它们属于窗口类定义的一部分。 但是,问题是,”这里的用户是谁?”…

【Mybatis小白从0到90%精讲】10:Mybatis动态SQL:foreach、choose标签

文章目录 前言一、foreach 标签二、choose、when、otherwise 标签前言 动态SQL 是 Mybatis的亮点功能之一,如果你经历过 拼接SQL 的繁琐痛苦,那么你就能切身感受到动态SQL到底有多爽!真香哈~ 另外,Mybatis将动态SQL设计的如此自然,让人看看就能理解和接受,我想这也是My…

谁说 Linux 不能玩游戏?

在上个世纪最早推出视频游戏的例子是托马斯戈德史密斯(Thomas T. Goldsmith Jr.)于1947年开发的“「Cathode Ray Tube Amusement Device」”,它已经显着发展,并且已成为人类生活中必不可少的一部分。 通过美国游戏行业的统计数据&…

【iOS】知乎日报前三周总结

这几天一直在进行知乎日报的仿写,仿写过程中积累了许多实用的开发经验,并对MVC有了更深的了解,特撰此篇作以总结 目录 第一周将网络请求封装在一个单例类Manager中SDWebImage库的简单使用运用时间戳处理当前时间自定义NavigationBar 第二周在…

求极限Lim x->0 (x-sinx)*e-²x / (1-x)⅓

题目如下: 解题思路: 这题运用了无穷小替换、洛必达法则、求导法则 具体解题思路如下: 1、首先带入x趋近于0,可以得到(0*1)/0,所以可以把e的-x的平方沈略掉 然后根据无穷小替换,利用t趋近于0时&#xf…

容器核心技术-Namespace

一、容器 基于Linux 内核的 Cgroup, Namespace,以及Union FS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术,由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。 1.1 容器主要特性…

皮肤病辅助诊断软件,基于Android编写

1.系统介绍 编写的皮肤病辅助诊断软件,包括皮肤病识别、皮肤病区域分割、皮肤病信息介绍、识别历史记录查询、简单图像处理操作以及本机信息查询等功能 2.登录界面 运行之后首先显示登录界面 3.注册界面 注册一个账号 4.主界面 输入用户名密码点击登录按钮…

C语言——通讯录管理系统2.0版

对比之前C语言——通讯录管理系统初始版本,2.0版本有以下优化: 1.采用链表实现(之前版本是顺序表实现的,导致通讯录容量有限,现在使用链表实,实现了动态开辟空间,不浪费空间,也不会出…

用于3D Visual Grounding的多模态场景图

文章目录 引言方法1. Language Scene Graph Module Paper:《Free-form Description Guided 3D Visual Graph Network for Object Grounding in Point Cloud》【ICCV’2021】 Code:https://github.com/PNXD/FFL-3DOG 引言 3DVG任务有以下三个挑战&#x…

关于笔记平台的使用感受分享

关于笔记平台的使用感受分享 前言我用过的笔记平台笔记平台简单评价巴拉巴拉WPS文档/OneNote/TowerNotion/语雀各种博客平台 个人使用率最高的平台 前言 最近也有部分同学问我平常用的笔记平台是什么,以及我比较推荐的平台是什么。这里不是广告哈,因为我…

Spring AOP 简介

一、Spring AOP AOP 是一种思想,而 Spring AOP 是一个框架,提供了一种对 AOP 思想的实现。 1、什么是 AOP? AOP(Aspect Oriented Programming):是一种编程思想,表示面向切面编程。指的是对某…

<Vue>使用依赖注入的方式共享数据

什么是vue依赖注入? Vue是一个用于构建用户界面的渐进式框架。 它提供了一种简单而灵活的方式来管理组件之间的数据流,即依赖注入(Dependency Injection,DI)。 依赖注入是一种设计模式,它允许一个组件从另一…

【数组】有序数组的平方

## 977.有序数组的平方 力扣题目链接 (opens new window) 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums [-4,-1,0,3,10]输出:[0,…

升级Python版本后,anaconda navigator启动失败

anaconda navigator启动失败,尤其是重装不解决问题的,大概率是库冲突 1.通过anaconda-navigator的图标启动,没有反应 2.在命令窗口,输入anaconda-navigator,报错如下 anaconda-navigator 3.错误来自这里 File &quo…