1. 线程安全点 safe point

线程在safe point上时,可以安全得被其他JVM线程所操作和观测,不在的则不行;
线程安全点:

  • 方法返回之前
  • 调用某个方法之后
  • 抛出异常的位置
  • 循环的末尾

2. 类加载过程

  1. [加载] 利用双亲委派机制加载字节码文件(.class)到JVM中,将字节流代表的静态存储结构转化为方法区的运行时数据结构
  2. [链接]
    验证 字节码格式是否正确
    准备 分配内存并给所有静态变量隐式初始化
    解析 将运行时常量池中的符号引用转换为实际内存地址引用,编译阶段不知道实际内存地址,当处于解析过程中,可以知道实际内存地址
  3. [初始化]: 显示初始化,静态变量会被赋值,静态代码块执行

3. 对象初始化过程

  1. 加载类,详细见上
  2. 分配内存
  3. 执行隐式初始化,成员变量赋初始值
  4. 执行init构造方法,成员变量赋值,构造方法

4. 双亲委派机制

  • Bootstrap rt.jar
  • Extension jre/lib/*.jar
  • Application classpath下
  • 自定义加载器 自定义路径
    当需要加载一个class时,由下往上逐级查找是否已加载,如果未加载则由上级查找,j当查找到boostrap加载器时,若仍为未加载类,则由bootstrap加载器尝试加载,若无法加载则下发给下级类加载器,直至加载到类

5. JVM内存模型

  • 虚拟机栈 : 包含三大块,局部变量表,

AshShawn
6 声望2 粉丝