《深入理解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
posted @ 2020-03-27 21:33  断腿三郎  阅读(249)  评论(0编辑  收藏  举报