JVM理论:(三)类加载机制

一、类文件结构

  1、class类文件结构

    1)魔数与Class文件的版本

    2)常量池

    3)类或接口层次的访问标志

    4)类索引、父类索引、接口索引集合,通过这三项数据来确定这个类的继承关系

    5)字段表,包括类级变量、实例级变量,是不包括方法内部声明的局部变量的,不会列出从父类或父接口中继承的字段

    6)方法表,方法体的代码经过Javac编译器处理后,最终变为字节码指令存储在Code属性内

    7)属性表

  2、字节码指令有哪些

  3、栈帧

    每一个方法从调用开始到执行完成,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。

    每一个栈帧都包括了局部变量表,操作数栈,动态连接,方法返回地址。

    Java编译器输出的指令流,是一种基于操作数栈的指令集架构。

  4、方法调用

    JAVA虚拟机里面提供了5条方法调用的字节码指令。

    解析:在编译器进行编译时就有一个可确定的调用版本,在类加载的解析阶段就会将符号引用转化为直接引用。

    分派:依赖变量的静态类型来定位方法执行版本的分派动作称为静态分派,在运行期根据实际类型确定方法执行版本的分派过程称为动态分派。

二、类加载

  1、类加载过程

    加载、验证、准备、解析、初始化

  2、类加载器

    双亲委派模型

 

猜你喜欢

转载自www.cnblogs.com/zjxiang/p/9218136.html