【JVM】类文件结构-class本质及内部数据结构

本文详细介绍了Java Class文件的本质特征和内部结构,包括Class文件的格式、数据类型、以及整体结构框架等内容,帮助读者深入理解Java虚拟机如何识别并加载Class文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

Class本质

Class文件格式

Class数据类型 

Class文件结构

相关BAT面试题:


Class本质

本篇文章标题小编的是Class本质,并没有说是Class文件本质,原因是一般情况下我们常见到的Class文件是以存储在磁盘中的形式存在的,然而Java虚拟机并不会这么‘死板’,只要符合Java虚拟机规范的Class信息都是可以被正确识别的,无论他是存储在磁盘中(文件),还是以二进制流的方式直接输送到类加载器中。

这里可能有些牵强,磁盘中的Class文件、二进制流的Class流都可以说是文件,文字游戏并不是重点,重点是突出Java虚拟机设计之灵活。

图片


Class文件格式

任意一个符合Java虚拟机规范的class信息格式是严格限定的,甚至没有任何分隔符的紧凑排列,每个字节的长度、含义、顺序都不允许被改变。

图片


Class数据类型 

任一Class结构中只有两种数据类型,分别是 无符号数 和 表


无符号数(基本类型):无符号数分别用 u1 u2 u4 u8代表 1 2 4 8个字节来描述数字、引用、字符串等,这种表现方式类似于C语言结构体。

表:表是一种符合数据类型,其组成可以是多个表的组合或者是多个无符号数组合,这样便能更好的描述有层次关系的复合结构类型。

【注】一个类、方法就相当于一个表,表常用 _info 的标志来说明这是一个表(文末解释说明)

【注】由于字节码没有分隔符的排列,对于表来说,通常在他的前面会有个数说明(文末解释说明)


这里对表的理解可能有些抽象,就拿一个类来简单说明下:

图片


Class文件结构

从Java虚拟机第一版发行至今,Class文件的基本结构和框架是非常稳定的,虽然目前有多个版本的Java虚拟机规范,但对Class文件的整体的结构及框架的改动是很少的。

Class文件整体结构如下:

  1. 魔术

  2. Class版本

  3. 常量池

  4. 访问标识

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

  6. 字段表集合

  7. 方法表集合

  8. 属性表集合 

对照Java虚拟机规范中的案例解释如下:(轻触图片放大看更清晰)

图片


注意到Class文件结构中描述各个结构的数据类型处理 u1 u2 外还有  xx_info 形式的,这就是表的标志,并且凡是有表的其前面会有一个长度说明 

图片


相关BAT面试题:

1、类文件结构有几个部分?

2、知道字节码吗?字节码都有哪些?

3、从字节码角度说说 Integer x = 9; int y = 9; 比较 x == y 都经过了哪些步骤?


以上内容就是有关Class文件的本质特性及内部结构信息,希望对你有所帮助。

文章福利

深入理解Java虚拟机  周志明 第三版

公众号:Java岛 回台回复 JVM 即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bearx...

请作者喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值