类文件结构

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");
        
    

字节码序列:

以上是关于类文件结构的主要内容,如果未能解决你的问题,请参考以下文章

class类加载

Jvm(35),class文件结构----常量池

ThinkPHP框架

从源码层面分析Mybatis中Dao接口和XML文件的SQL是如何关联的

Android-从本质层面了解数据结构与算法

Android-从本质层面了解数据结构与算法