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): 表示方法的集合

属性表集合

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


相关文章
|
19天前
|
安全 Java
对 JVM 的类加载机制以及寻找字节码文件的“双亲委派模型”的理解
对 JVM 的类加载机制以及寻找字节码文件的“双亲委派模型”的理解
15 0
|
19天前
|
存储 Oracle Java
JVM中Class文件结构详解
JVM中Class文件结构详解
82 0
|
7天前
|
Java 索引
【JVM】字节码文件的组成部分
【JVM】字节码文件的组成部分
17 1
|
19天前
|
存储 前端开发 Java
深入浅出JVM(四)之类文件结构
深入浅出JVM(四)之类文件结构
深入浅出JVM(四)之类文件结构
|
19天前
|
存储 XML 监控
JVM工作原理与实战(三):字节码文件的组成
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了字节码文件的基础信息、常量池、方法、字段、属性等内容。
37 6
|
19天前
|
存储 Java 索引
《深入浅出Java虚拟机 — JVM原理与实战》带你攻克技术盲区,夯实底层基础 —— 吃透class字节码文件技术基底和实现原理(核心结构剖析)
《深入浅出Java虚拟机 — JVM原理与实战》带你攻克技术盲区,夯实底层基础 —— 吃透class字节码文件技术基底和实现原理(核心结构剖析)
38 0
|
19天前
|
存储 Java 编译器
深入理解JVM - 类文件结构
深入理解JVM - 类文件结构
59 1
|
19天前
|
存储 缓存 前端开发
JVM(二):Class加载机制
JVM(二):Class加载机制
|
10月前
|
Java 关系型数据库 MySQL
阿里面试官(性能优化):描述一下jvm加载class文件的原理机制?
相信很多人对于性能优化都不陌生,为了获得更好的系统性能,或者是为了满足不断增加的业务需求。 都需要用到我们的性能调优。所以性能优化在面试中出现的频率特别高 楼主自认为自己对性能优化相关知识有很多了解,而且因为最近在找工作面试,所以单独复习了很多关于索引的知识。
|
10月前
|
Arthas 监控 Java
【Java基础】- JVM之Dump文件详解
【Java基础】- JVM之Dump文件详解
1512 3
【Java基础】- JVM之Dump文件详解