当JVM运行Java程序的时候,它会加载对应的class文件,并提取class文件中的信息存放在JVM的方法区内存中。Class文件组成1、Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按顺序紧凑排列在Class文件中,中间没有分隔符。所以Class文件中存 ...
当JVM运行Java程序的时候,它会加载对应的class文件,并提取class文件中的信息存放在JVM的方法区内存中。
Class文件组成
1、Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按顺序紧凑排列在Class文件中,中间没有分隔符。所以Class文件中存储的内容几乎全部是程序运行的必要数据。
2、当遇到占据8位字节以上空间的数据项时,会按照高位在前的方式, 分割成若干个8位字节进行存储。
Class文件数据类型
无符号数
1、基本数据类型,以u1、u2、u4、u8分别代表1个字节、2个字节、4个字节、8个字节。
2、无符号数可以用来描述数字、索引引用、数量值和按照UTF8编码构成字符串值。
表
1、表用来描述有层次关系的的复合数据结构。
2、表是由无符号数或者其他表作为数据项构成的复合数据结构。
3、所有表都以_info结尾。
4、整个class文件本质上就是一张表。
item1:magic(魔数)[u4]:0xCAFEBABE
辨别class文件与非class文件
item2:minor_version、major_version(次、主版本号) [u2,u2]
随着Java技术的发展,class文件的格式会发生变化。版本号的作用在于使得虚拟机能够认识当前加载class的文件格式。从而准确的提取class文件信息。
item3:常量池(constant_pool_count 、constance_pool)[u2,cp_info]
常量池内容
常量池存放两大类常量:字面量(Literal)和符号引用(Synbolic Reference)
一、字面量
1、文本字符串
2、声明为final的常量值
final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量
3、基本数据类型
4、其他
二、符号引用
类和接口的全限定名(Fully Qualified Name)
原标题:jvm理论
关键词:jvm
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。