首页 /  技术专区  /  JVM 宽屏模式 >

字节码文件详解

Image.png

字节码文件的组成

Image.png

以正确的姿势打开文件

字节码文件中保存了源代码编译之后的内容,以二进制的方式存储,无法直接用记事本打开阅读。

通过NotePad++使用十六进制插件查看class文件:

Image.png

推荐使用 jclasslib工具查看字节码文件。

Github地址: https://github.com/ingokegel/jclasslib

Image.png

基础信息

Image.png

常量池

Image.png

字段

Image.png

方法

Image.png

属性

Image.png

字节码文件的组成部分-Magic魔数

Image.png

 文件是无法通过文件扩展名来确定文件类型的,文件扩展名可以随意修改,不影响文件的内容。

 软件使用文件的头几个字节(文件头)去校验文件的类型,如果软件不支持该种类型就会出错。

 Java字节码文件中,将文件头称为magic魔数

Image.png

字节码文件的组成部分-主副版本号

 主副版本号指的是编译字节码文件的JDK版本号,主版本号用来标识大版本号,JDK1.0-1.1使用了

45.0-45.3,JDK1.2是46之后每升级一个大版本就加1;副版本号是当主版本号相同时作为区分不同

版本的标识,一般只需要关心主版本号。

 版本号的作用主要是判断当前字节码的版本和运行时的JDK是否兼容。

Image.png

字节码文件的组成 – 基础信息

Image.png

字节码文件的组成部分-常量池

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

Image.png

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

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

Image.png

字节码文件的组成部分-方法

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

Image.png

 操作数栈是临时存放数据的地方,局部变量表是存放方法中的局部变量的位置。

Image.png

Image.png

Image.png

Image.png

Image.png


玩转字节码常用工具: javap -v命令

 javap是JDK自带的反编译工具,可以通过控制台查看字节码文件的内容。适合在服务器上查看字节码文件内

容。

 直接输入javap查看所有参数。

 输入javap -v 字节码文件名称 查看具体的字节码信息。(如果jar包需要先使用 jar –xvf 命令解压)

Image.png


玩转字节码常用工具: jclasslib插件

 jclasslib也有Idea插件版本,建议开发时使用Idea插件版本,可以在代码编译之后实时看到字节码

文件内容

Image.png

玩转字节码常用工具: 阿里arthas

Image.png

 Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修

改应用代码的情况下,对业务问题进行诊断,大大提升线上问题排查效率。

 官网:https://arthas.aliyun.com/doc/

 dump 类的全限定名:dump已加载类的字节码文件到特定目录。

Image.png

 jad 类的全限定名: 反编译已加载类的源码。

Image.png



上一篇: 初识 JVM
下一篇: 类的生命周期

头像
0/200
图片验证码