Class文件简单解析

news2024/10/6 1:44:27

一、Class文件 

Test.java

public class Test{
private int count;
public int inc(){
return count++;
  }
}

vim -b Test.class
输入 :%!xxd

图一

java反编译

javap -v -l -c Test.class

图二

二、Class文件解析

1、Class文件结构

1、魔数

魔数magic是Class文件的标记,在class文件最开头四个字节,其十六进制值是cafe babe,参见图一,这个标记是用来告诉虚拟机这是Class文件。

2、Class文件版本

小版本号(minor_version)、大版本号(major_version)表示当前Class文件由哪个版本的编译器产生,图一major_version 为55表示编译器版本是JDK11,  JDK编译器的版本和Class文件的大版本对应关系如下

50-JDK6、51-JDK7、52-JDK8、53-JDK9、54-JDK10、55-JDK11

高版本JVM可以执行低版本Class,低版本JVM不能执行高版本Class。

3、常量池

图二,可以看到Constant pool常量池下有18个常量,对应图一第一行的第9,10字节值为【0013】常量数量。

常量池存放两类常量:字面量和符号引用。

这个太复杂,不仔细讲了,因为我也不太懂 :)

常量池的作用是:常量池是用来保存常量一个中间场所,在JVM运行时把常量池中的常量加载到内存中

4、Class访问标记

图二第五行 

flags: (0x0021) ACC_PUBLIC, ACC_SUPER

ACC_PUBLIC 表示是Public的类。

5、方法

图二第39行~53行

stack=4,locals=1,args_size=1

stack=4:操作数栈最大深度为4,用于保存计算过程中间结果,同时做为计算过程变量临时存储空间。

locals=1:本地变量表大小

args_size=1:方法参数个数

方法指令解析

0: aload_0:从局部变量表加载到操作数栈
1: dup:dup指令可以复制操作数栈栈顶的一个字
2: getfield:获取变量count的值
5: dup_x1:复制栈顶部一个字长的内容,
   然后将复制内容及原来弹出的两个字长的内容压入栈
6: iconst_1 不细说,因为我也不懂 :)
7: iadd:加运算
8: putfield 将结果赋给局部变量
11: ireturn 返回

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

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

相关文章

(免费领源码)java#Springboot#mysql英语自主学习平台的设计与实现35901-计算机毕业设计项目选题推荐

摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设英语自主学习平台。 …

【Proteus仿真】【STM32单片机】水箱液位监控系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602液晶、按键、蜂鸣器、液位传感器、PCF8591 ADC转换器、水泵等。 主要功能: 系统运行后,LCD1602显示当前水位、上…

安全和便捷:如何将运营商二要素API应用于实名制管理中

引言 随着互联网的快速发展,数字化身份验证和实名制管理变得越来越重要。在金融、电子商务、社交媒体等领域,确保用户身份的安全和准确性至关重要。运营商二要素核验API成为了实名制管理的有力工具,它不仅能够提供高水平的安全性&#xff0c…

M-LVDS收发器MS2111,可替代SN65MLVD206

MS2111 是多点低压差分 (M-LVDS) 线路驱动器和接收器。经过 优化,可运行在高达 200Mbps 的信号速率下。所有部件均符合 M LVDS 标准 TIA / EIA-899 。该驱动器的输出支持负载低至 30Ω 的多 点总线。 MS2111 的接收器属于 Type-2 , 可在 -1…

特殊类设计[上]

文章目录 1.只能在堆上创建对象的类1.1析构函数私有化1.2析构函数 delete1.3构造函数私有定义拷贝构造私有只声明1.4构造函数私有定义拷贝构造 delete 2.不能被拷贝的类2.1 私有声明不定义拷贝构造函数2. 2拷贝构造函数 delete 3.只能在栈和静态区创建对象的类4.不能被继承的…

Galaxy生信云|新增生存曲线绘制、肿瘤基因通路注释工具

2023-10-26,Galaxy生信云平台 UseGalaxy.cn 新增 2 个工具。 Cancer Research 生存曲线 Kaplan-Meier curve ploter肿瘤通路注释 Gene to oncogenic pathway mapper 部分结果展示 生存曲线 Kaplan-Meier curve ploter 生存曲线-不分层: 生存曲线-分层&am…

封装, 继承, 多态详解

面向对象编程有三大特征:封装、继承和多态 一.封装 思维导图概览: 1. 封装的概念 —— 把抽象出的数据(属性)和对数据的操作(方法)封装到一起,数据被保护在内部,程序的其它部分只有…

linux系统 too many open files解决方法

1.遇到的问题 too many open files是Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做…

Python 中的邻接矩阵

Python 中使用图数据结构来表示各种现实生活中的对象,例如网络和地图。 我们可以使用邻接矩阵来表示图。 本文将讨论在 Python 中实现邻接矩阵的不同方法。 创建邻接矩阵 考虑下图。 图中,有 6 个节点,编号为 1 到 6。图中连接节点的边有 7 条; 边 eij 连接节点 i 和节点…

2023年中国儿童滑板车优点、市场规模及发展前景分析[图]

儿童滑板车行业是指专门生产、销售和服务于儿童滑板车的行业。儿童滑板车是一种两轮滑行车,通常由车架、轮子、刹车和把手等部件组成。儿童滑板车是一种受欢迎的户外运动和娱乐工具,可以帮助儿童锻炼身体、提高平衡和协调能力,同时也是一种时…

无人机真机搭建问题记录文档(待续)

搭建问题 问题1 高飞课程中的飞控停产,更换飞控(pixhawx 6c)出现如下问题 1、飞控太大造成安装机载电脑的碳板上的孔被挡住。 2、课程提供的飞控固件,与更换的飞控不匹配 解决办法 1、现在的无人机碳板上只安装三个螺纹孔&…

如何平衡需求变更与项目进度冲突问题?

需求变更往往会对项目进度产生影响,可能会导致项目进度的重新评估、调整和重新开发已有功能,从而延长交付时间。如果忽视拒绝需求变更,会导致客户的不满和冲突。 因此如何更好地平衡两者间的冲突问题,迫在眉睫。一般来说&#xff…

【Unity ShaderGraph】| 制作一个 高级流体水球效果

前言 【Unity ShaderGraph】| 快速制作一个 流体水球效果一、效果展示二、简易流体水球效果三、进阶流体水球效果四、应用实例 前言 本文将使用ShaderGraph制作一个 高级流体水球 ,可以直接拿到项目中使用。对ShaderGraph还不了解的小伙伴可以参考这篇文章&#xf…

8.MySQL内外连接

个人主页:Lei宝啊 愿所有美好如期而遇 目录 表的内连和外连 内连接 外连接 左外连接 右外连接 我们进行演示的表结构是这样的: 表的内连和外连 内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的…

Vue3项目创建+组合式API使用+组件通信+渲染微博热搜+打包上线

摘要 Vue3的组合式API大大减少了代码量,以及使用也方便了很多,本案例使用Vite创建一个Vue3示例,简单介绍Vue3的组合式API使用以及父传子组件传参示例。 创建Vue3项目 1、首先要安装 Node.js 下载地址:https://nodejs.org/en/do…

css-物联网管理界面

效果图: 分享链接: monitor https://www.aliyundrive.com/s/CkLVqXcnJFc 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。

qt 双击可执行文件提示没有平台插件Qt platform plugin

准备打包可执行文件时,双击可执行文件 报错提示: 解决办法: 从qt安装目录下拷贝platforms文件夹,放在你要执行的可执行目录里。

App在哪里可以免费内测分发?

当ios开发者开发完成ios App后,往往要进入内测或公测阶段,需要进行分发,测试用户才能下载应用。 App分发平台是许多app开发类企业经常使用的平台,将主要开发的app上传到app分发平台上进行内测下载。很多开发者服务平台其实是提供…

SDRAM学习笔记(MT48LC16M16A2,w9812g6kh)

一、基本知识 SDRAM : 即同步动态随机存储器(Synchronous Dynamic Random Access Memory), 同步是指其时钟频率与对应控制器(CPU/FPGA)的系统时钟频率相同,并且内部命令 的发送与数据传输都是以该时钟为基准&#xff…

Python中if __name__ == ‘__main__‘,__init__和self 的解析

一、 if __name__ __main__ if __name__ __main__的意思是: 当.py文件被直接运行时,if __name__ __main__之下的代码块将被运行; 当.py文件以模块形式被导入时,if __name__ __main__之下的代码块不被运行。 1.1、一个 xxx.p…