五、Java虚拟机执行子系统

类文件结构

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高级特性和最佳实践第三版>

猜你喜欢

转载自blog.csdn.net/qq_32323239/article/details/105913337