《深入理解Java虚拟机》之类文件结构

阅读《深入理解Java虚拟机》第2版,结合JDK8的读书笔记。当前文章为书本的第6章节。

6.1.概述

越来越多的程序语言选择了与操作系统和机器指令集无关的、平台中立的格式作为程序编译后的存储格式。

6.2.无关性的基石

  • 平台无关性

各种不同平台的虚拟机与所有平台都统一使用的程序存储格式-字节码(ByteCode),是构成平台无关性的基石.

  • 语言无关性

实现语言无关性的基础是虚拟机和字节码存储格式。Java虚拟机不和包括Java在内的任何语言绑定,它只与“Class文件”这种特定的二进制文件格式所关联。

6.3.Class类文件的结构

Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符。根据java虚拟机规范的规定,Class文件格式采用一种类似于C语言结构体的伪结构来存储数据,这种伪结构中只有无符号数和表。

  • 无符号数属于基本的数据类型,以u1,u2,u4,u8来代表1个字节,2个字节,4个字节和8个字节。

无符号数可以用来描述数字、索引引用、数量值或者按照UTF-8编码构成字符串值。

  • 表是由多个无符号数或者其他表作为数据项构成的复合数据类型,所以表都习惯性地以“_info”结尾。

表用于描述有层次关系的复合结构的数据,整个Class文件本质上就是一张表。由以下表格所示的数据项构成。

类型名称数量备注
u4magic1魔数值;Java文件为CAFEBABE
u2minor_version1此版本
u2major_version1主版本;十进制45表示JDK1.1
u2constant_pool_count1常量数
cp_infoconstant_poolconstant_pool_count-1常量池
u2access_flags1访问标识
u2this_class1当前类索引值
u2super_class1当前类的父类索引值,Java单继承
u2interfaces_count1当前类的接口数量值,Java多实现
u2interfacesinterfaces_count当前类的接口索引值
u2fields_count1字段数量
field_infofieldsfields_count字段信息表
u2methods_count1方法数量
method_infomethodsmethods_count方法信息表
u2attributes_count1属性数量
attribute_infoattributesattributes_count属性信息表

6.3.1.魔数与Class文件的版本

  • magic - u4

魔数(Magic-Number),用于确定该文件是否为一个能被虚拟机接受的class文件

很多文件存储标准中都用魔数来进行身份识别,如gif,jpeg都在文件头中存有魔数。JAVA的class文件魔数为CAFEBABE。

  • minior_version - u2

次版本号

  • major_version - u2

主版本号。

Java版本号从45开始。0x002D等同于十进制2*16+13=45,也就是JDK1

未完待续…

关注我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

瑾析编程

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值