《jvm学习笔记》类加载器

编程

装载类的第一个阶段

取得类的二进制流

转为方法区数据结构

在Java堆中生成对应的java.lang.Class对象

  • 链接

    • 验证

      目的:保证Class流的格式是正确的

      •文件格式的验证

      • 是否以0xCAFEBABE开头
      • 版本号是否合理

      •元数据验证

      • 是否有父类
      • 继承了final类?
      • 非抽象类实现了所有的抽象方法

      •字节码验证 (很复杂)

      • 运行检查
      • 栈数据类型和操作码数据参数吻合
      • 跳转指令指定到合理的位置

      符号引用验证

      • 常量池中描述类是否存在
      • 访问的方法或字段是否存在且有足够的权限

    • 准备

      • 分配内存,并为类设置初始值 (方法区中)

    • 解析

      • 符号引用替换为直接引用

  • 初始化

    • 执行类构造器<clinit>

      • static变量 赋值语句
      • static{}语句

    • 子类的<clinit>调用前保证父类的<clinit>被调用
    • <clinit>是线程安全的

  • 以上是 《jvm学习笔记》类加载器 的全部内容, 来源链接: utcz.com/z/513172.html

    回到顶部