类文件结构
Posted 背时的哥哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类文件结构相关的知识,希望对你有一定的参考价值。
1.Class文件结构
1.魔术与Class文件的版本
1.魔术:每个Class文件的头4个字节称为魔术,其唯一作用是确定这个文件是否为一个能被虚拟机接受的Class文件;
2.紧接着魔术的4个字节储存的是Class文件的版本号:第5和第6个字节是此版本号,第7和第8个字节是主版本号;
3.紧接着是常量池入口,常量池主要存放字面量和符号引用;
3.1.字面量:接近于Java语言层面的常量概念,如文本字符串,被声明为final的常量值等;
3.2.符号引用主要包含:①被模块导出或者开放的包;②类和接口的全限定名;③字段的名称和描述符;④方法的名称和描述符;⑤方法句柄和方法类型;⑥动态调用点和动态常量
2.方法调用和返回指令
1.invokevirtual:用于调用对象的实例方法,根据对象的实际类型进行分派;
2.invokeinterface:用于调用接口方法,它会在运行时搜索一个实现这个接口方法的对象,找出合适的方法进行调用;
3.invokespecial:用于调用一些需要特殊处理的实例方法,包括实例初始化方法,私有方法和父类方法;
4.invokestatic:用于调用静态方法;
5.invokedynamic:用于在运行时动态解析出调用点限定符引用的方法,并执行该方法;
3.同步指令
Java虚拟机可以支持方法级的同步和方法内部一段指令序列的同步,这两种同步都是使用管程来实现的;
Java虚拟机的指令中有monitorenter和monitorexit两条指令来支持synchronized关键字的语义,如:
public void dos(Integer integer)
synchronized (integer)
System.out.println("do");
字节码序列:
以上是关于类文件结构的主要内容,如果未能解决你的问题,请参考以下文章