Java教程

JVM-类加载和字节码技术

本文主要是介绍JVM-类加载和字节码技术,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

类文件结构

根据JVM的规范,类文件的结构如下:

类型 名称 解释
u4 magic 魔数
u2 minor_version 小版本号
u2 major_version 主版本号
u2 constant_pool_count 常量池长度
cp_info constant_pool[constant_pool_count - 1] 常量池信息
u2 access_flags 访问修饰
u2 this_class 当前类信息
u2 super_class 父类信息
u2 interfaces_count 接口长度
u2 interfaces[interfaces_count] 接口信息
u2 fields_count 类中成员变量长度
field_info fields[fields_count] 成员变量信息
u2 methods_counts 方法长度
method_info methods[methods_count] 方法信息
u2 attributes_count 附加属性长度
attribute_info attributes[attributes_count] 附加属性信息

魔数

占4个字节。用来表示这是一个java文件,java的魔数是ca fe be be

小版本号和主版本号

各占2个字节,共4个字节。用来表示类的版本,例如 00 00 00 34 ,其中 00 34 就表示是java8


常量池

常量池长度

占2个字节,位置在8~9字节。用来表示常量池长度,例如 00 23 表示常量池有2*16+3-1 = 34项,其中#0项不计入其中,也没有值。

常量池信息对应

类型
01 CONSTANT_Utf8
03 CONSTANT_Integer
04 CONSTANT_Float
05 CONSTANT_Long
06 CONSTANT_Double
07 CONSTANT_Class
08 CONSTANT_String
09 CONSTANT_Fieldref
0a CONSTANT_Methodref
0b CONSTANT_InterfaceMethofref
0c CONSTANT_NameAndType
of CONSTANT_MethodHandle
10 CONSTANT_MethodType
12 CONSTANT_InvokeDynamic

Method

methods_counts

占用2个字节。表示方法的个数

method_info

方法信息。一般有构造方法init 和 主函数main。

其它

访问标识对应

类型
0x0001 ACC_PUBLIC
0x0010 ACC_FINAL
0x0020 ACC_SUPER
0x0200 ACC_INTERFACE
0x0400 ACC_ABSTRACT
0x1000 ACC_SYNTHETIC
0x2000 ACC_ANNOTATION
0x4000 ACC_ENUM

Field信息对应

Type FieldType
byte B
char C
double D
float F
int I
long J
reference L ClassName;(引用类型)
short S
boolean Z
reference [(一维数组)



==================== 参 考 文 献 ====================



这篇关于JVM-类加载和字节码技术的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!