类文件结构
class文件用C语言的结构体这样表示:
ClassFile {
u4 magic; // 魔数
u2 minor_version; // 次版本号
u2 major_version; // 主版本号
u2 constant_pool_count; // 常量池大小
cp_info constant_pool[constant_pool_count-1]; // 常量池主要存放两大类常量:字面量(Literal)和符号引用(Symbolic References)
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_count; // 方法表容量
method_info methods[methods_count]; // 方法表集合
u2 attributes_count; // 属性表容量
attribute_info attributes[attributes_count]; // 属性表集合
}
2、字节码指令简介
同步指令
Java虚拟机可以支持方法级的同步和方法内部一段指令序列的同步,这两种同步结构都是使用管 程(Monitor,更常见的是直接将它称为“锁”)来实现的。在Java中使用synchronized来实现同步,Java虚拟机的指令集中 有monitorenter和monitorexit两条指令来支持synchronized关键字的语义,正确实现synchronized关键字 需要Javac编译器与Java虚拟机两者共同协作支持。
参考:<深入理解Java虚拟机:JVM高级特性和最佳实践第三版>