《深入理解JAVA虚拟机》第三版 第六章 要点总结
本文仅作为复习清单使用
Class结构
1.魔数(第1~4字节)
固定为0xCOFEBABE
2.版本号(第5~8字节)
第5,6字节:次版本号,JDK2~JDK12一直置零
第7,8字节:主版本号,计数从45开始
3.常量池
索引从1开始
第9,10字节 常量池计数值
接下来是常量表
4.访问标志
5.类索引集合
6.父类索引集合
7.接口索引集合
8.字段表集合
9.方法表集合
以上部分按顺序排列
属性表集合包含在以上集合之中
常量池内容
字面量
符号引用
JAVA类的符号引用的理解
常量池中共17种类型,每一种类型都是以一个字节的tag开头,标识接下来是第几类类型
类型的形式详见P222
访问标志
这个类的修饰符(final,public,abstract),类型(类,接口,注解,枚举,模块等),是否由用户代码产生(可能由jvm添加),是否允许调用invokespecial指令
一共9个标志位可用,详见P224
类索引
u2,指向一个常量表,表示类的全限定名
父类索引,接口索引也一样,只是接口索引是一个集合,拥有一个接口计数器
属性表
Code属性 记录方法中的数据
Exception 方法抛出的异常(throws)
LineNumberTable 记录指令对应的java行号,非必须
LocalVariableTable 记录参数名,非必须,如果没有,代码调试会无法获取相关参数的值
LocalVariableTypeTable 用于泛型
SourceFile 源码文件名称
SourceDebugExtension 用于帮助非java文件(如jsp)的Debug
ConstantValue 用于static变量的初始化,javac追加限制 :final
InnerClasses 记录内部类与宿主类的关系
Deprecated 布尔属性,表示是否过时
Synthetic 布尔属性,表示是否有编译器自动生成
StackMapTable 用于虚拟机验证字节码
Signature 记录泛型相关信息,便于反射
BootstrapMethods
MethodParameter 记录方法的各个形参名称和信息
模块化相关属性
运行时注解
变量槽
JVM为局部变量分配内存所使用的最小单位
方法类代码长度
不超过65535条指令
异常表
P237
如需转载,请注明出处
如有侵权,联系删除
2290713181@qq.com
如有侵权,联系删除
2290713181@qq.com