JVM(一):Class文件格式

简介: JVM(一):Class文件格式

Class类文件结构

  • Class 文件是一组以 8 字节为基础单位的二进制流
  • 各个数据项目严格按照顺序紧凑排列在 class 文件中
  • 中间没有分隔符,这使得 class 文件中存储的内容几乎是全部程序运行的程序

包括两种类型:无符号数

无符号数

  • 属于基本数据类型
  • 按照 UTF-8 编码构成的字符串,大小使用 u1/u2/u4/u8 表示1字节、2字节、4字节、8字节

在class文件中,主要分为魔数Class文件的版本号常量池访问标志类索引(还包括父类索引和接口索引集合)、字段表集合方法表集合属性表集合

魔数

  • 每个 Class 的文件头的4个字节成为魔数 (Magic Number
  • 唯一作用是用于确定这个文件是否为一个能被虚拟机接受的 Class 文件
  • Class 文件魔数的值为 0xCAFEBABE。如果一个文件不是以 0xCAFEBABE 开头,那么他肯定就不是 Java class 文件
    Class文件的版本号
  • 次版本号(minor version):前 2 字节用于表示次版本号
  • 主版本号(major version):后 2 字节用于表示主版本号
    对应着 JDK 的版本号

常量池

常量池 简单理解为 class 文件的资源从库

  • 常量池容量计数值(constant pool count):常量的数量
  • 数据集合 (constant_pool): 数量 = constant pool count - 1
  • 字面量:文本字符串、被声明为final的常量值
  • 符号引用
  • 类和接口的全限定名
  • 字段的名称和描述符
  • 方法的名称和描述符

访问标志

主要用于识别一些类或接口层次访问信息

  • 是否 final
  • 是否 pubIicprivate
  • 是否是接口
  • 是否是 abstact
  • 是否是注解
  • 是否是枚举

类索引、父类索引、接口索引集合

确定类的继承关系

  • 类索引(this_class):用于确定这个类的全限定名,占2字节
  • 父类索引(super_class):用于确定这个类父类的全限定名【不允许多重继承】
  • 接口索引计数器(interfaces_count): 如果该类没有实现接口,则该数字为 0
  • 接口索引集合 (interfaces): 实现的哪些接口

字段表集合

  • 字段表计数器(fields_count): 字段表数据个数
  • 字段表集合(fields): 描述声明的变量
  • publicprotectedprivate
  • static
  • final
  • volatile

方法表集合

  • 方法表计数器(methods_count): 方法数据个数
  • 方法表集合(methods): 表示方法的集合

属性表集合

属性表集合不要求其中包含的属性表具有严格的顺序,并且只要属性的名称不与已有的属性名称重复,任何人实现的编译器可以向属性表中写入自己定义的属性信息。


相关文章
|
6月前
|
安全 Java
对 JVM 的类加载机制以及寻找字节码文件的“双亲委派模型”的理解
对 JVM 的类加载机制以及寻找字节码文件的“双亲委派模型”的理解
39 0
|
1月前
|
SQL 缓存 Java
JVM知识体系学习三:class文件初始化过程、硬件层数据一致性(硬件层)、缓存行、指令乱序执行问题、如何保证不乱序(volatile等)
这篇文章详细介绍了JVM中类文件的初始化过程、硬件层面的数据一致性问题、缓存行和伪共享、指令乱序执行问题,以及如何通过`volatile`关键字和`synchronized`关键字来保证数据的有序性和可见性。
28 3
|
1月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
41 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
4月前
|
Java
jmap 查看jvm内存大小并进行dump文件内存分析
jmap 查看jvm内存大小并进行dump文件内存分析
94 3
|
6月前
|
Java 索引
【JVM】字节码文件的组成部分
【JVM】字节码文件的组成部分
54 1
|
5月前
|
存储 Java 编译器
【搞定Jvm面试】 面试官:谈谈 JVM 类文件结构的认识
【搞定Jvm面试】 面试官:谈谈 JVM 类文件结构的认识
|
5月前
|
存储 XML 安全
JVM系列5-类文件结构
JVM系列5-类文件结构
32 0
|
6月前
|
存储 前端开发 Java
深入浅出JVM(四)之类文件结构
深入浅出JVM(四)之类文件结构
深入浅出JVM(四)之类文件结构
|
6月前
|
存储 XML 监控
JVM工作原理与实战(三):字节码文件的组成
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了字节码文件的基础信息、常量池、方法、字段、属性等内容。
94 6
|
6月前
|
存储 Java 索引
《深入浅出Java虚拟机 — JVM原理与实战》带你攻克技术盲区,夯实底层基础 —— 吃透class字节码文件技术基底和实现原理(核心结构剖析)
《深入浅出Java虚拟机 — JVM原理与实战》带你攻克技术盲区,夯实底层基础 —— 吃透class字节码文件技术基底和实现原理(核心结构剖析)
76 0