第9章 类加载及执行子系统的案例与实战

结构

第6章 类文件结构
第7章 虚拟机类加载机制
第8章 虚拟机字节码引擎
第9章 类加载及执行子系统的案例与实战

第6章 类文件结构

6.2 无关性的基石

跨平台的本质,平台无关,以及语言无关的统一字节码,如JRuby等。
任何语言->对应编译器->字节码->虚拟机

6.3 类文件结构

整体结构:属性+属性表

6.4 指令集

存储在方法表的code属性里。
指令类型:

  1. 加载和存储指令
  2. 运算指令
  3. 类型转换指令
  4. 对象创建和访问指令
  5. 控制转移指令:跳转指令行
  6. 方法调用和返回指令
  7. 异常处理指令
  8. 同步指令

第7章 虚拟机类加载机制

加载,连接(验证,准备,解析),初始化,使用,卸载。
立即初始化场景:

  1. 遇到new、getstatic、putstatic和invokestatic 4条子节码指令:new,调用静态字段或静态方法
  2. 反射调用
  3. 父类未初始化
  4. 执行主类(main方法)

7.3.1加载

  1. 获取字节流
  2. 转化为方法区运行结构
  3. 在内存中生成class对象:hotspot 放在方法区

7.3.2 验证

  1. 文件格式验证:符合Class文件规范
  2. 元数据验证:对类信息进行语义校验
  3. 字节码验证:方法体和指令验证
  4. 符号引用验证:外部匹配性校验

7.3.3 准备

为类变量分配内存和初始化(static字段)

7.3.4 解析

将符号引用替换为直接引用的过程,包括:类、字段、方法。
符号引用:任何描述引用目标的一组符号。
直接引用:直接指向目标的指针、句柄等。

7.3.5 初始化

构造

7.4 类加载器

7.4.2 双亲委派模型

先交给父类加载,防止子类重复加载。
破坏:通过热加载或OSGi等方式。

Tomcat类加载器

Comments
Write a Comment