当前位置: 首页 > article >正文

【Java】字节码文件

字节码文件组成部分

在这里插入图片描述

1、基本信息

在这里插入图片描述

1.1 Magic 魔数
  • 文件是无法通过文件扩展名来确定文件类型的,文件扩展名可以随意修改,不影响文件的内容。
  • 软件使用文件的头几个字节(文件头)去校验文件的类型,如果软件不支持该种类型就会出错。
  • Java字节码文件中,将文件头称为magic魔数。
文件类型字节数文件头
JPEG (jpg)3FFD8FF
PNG (png)489504E47(文件尾也有要求)
bmp2424D
XML (xml)53C3F786D6C
AVI (avi)441564920
Java字节码文件(•class)4CAFEBABE
1.2 主副版本号
  • 主副版本号指的是编译字节码文件的JDK版本号
    • 主版本号用来标识大版本号,JDK1.0-1.1使用了45.0-45.3,JDK1.2是46之后每升级一个大版本就加1
    • 副版本号是当主版本号相同时作为区分不同版本的标识,一般只需要关心主版本号。
  • 版本号的作用主要是判断当前字节码的版本和运行时的JDK是否兼容。

1.2之后大版本号计算方法就是:主版本号 - 44,例如主版本号 52 即为 JDK8

主版本号不兼容导致的错误:

类文件具有错误的版本 52.9,应为 50.0
请删除该文件或确保该文件位于正确的类路径子目录中。

解决方案:

  • 第一种,升级JDK版本
  • 第二种,将第三方依赖的版本号降低或者更换依赖,以满足JDK版本的要求

2、常量池

字节码文件中常量池的作用:避免相同的内容重复定义,节省空间。

常量池中的数据都有一个编号,编号从1开始。在字段或者字节码指令中通过编号可以快速的找到对应的数据。

字节码指令中通过编号引用到常量池的过程称之为符号引用。

3、方法

字节码中的方法区域是存放字节码指令的核心位置,字节码指令的内容存放在方法的Code属性中。

4、查看字节码文件

  • 本地文件可以使用 jclasslib 工具查看,开发环境使用 jclasslib 插件。
  • 服务器上文件使用 javap 命令直接查看,也可以通过 arthas 的 dump 命令导出字节码文件再查看本地文件。还可以使用 jad命令反编译出源代码。

http://www.kler.cn/a/401241.html

相关文章:

  • Flutter 扫描二维码
  • go-zero(七) RPC服务和ETCD
  • 【c++丨STL】list的使用
  • 【电子设计】按键LED控制与FreeRTOS
  • thinkphp6 入门(2)--视图、渲染html页面、赋值
  • 【LeetCode 题】只出现一次的数字--其余数字都出现3次
  • 自动驾驶系列—自动驾驶数据脱敏:保护隐私与数据安全的关键技术
  • 【面试题】接口怎么测试?如何定位前后端的Bug?
  • Spring 中的 BeanDefinitionParserDelegate 和 NamespaceHandler
  • rk3568, can(3)-----canfd与can2.0
  • 3D Streaming 在线互动展示系统:NVIDIA RTX 4090 加速实时渲染行业数字化转型
  • Django学习笔记十五:Django和Flask有什么区别?
  • React教程第四节 组件的三大属性之state
  • 菜鸟驿站二维码/一维码 取件识别功能
  • MongoDB自定义顺序排序
  • 身份证号码校验
  • 【python爬虫之 funboost 分布式函数调度框架】
  • sql server查看当前正在执行的sql
  • 理解DOM:前端开发的基础
  • LLM2CLIP:通过大型语言模型扩展 CLIP 的能力边界
  • 机器学习评价标准
  • Postman之newman
  • 使用Python和OpenCV连接并处理IP摄像头视频流
  • 点云(网格)PCA及其存在的问题
  • 「三」体验HarmonyOS端云一体化开发模板——使用DevEco Studio直接创建端云一体化工程
  • 计算机视觉:赋予机器“看”的能力