画布 1
Chapter7.类加载机制
  加载时机
    简单点说：需要用到再加载 （P263）
  类加载过程
    加载 Loading
      ClassLoader实现
      功能：通过一个类的全限定名来获取此类的二进制字节流
      加载结束后，二进制字节流就按照虚拟机结构存储在方法区了
    验证 Verification
      文件格式验证
      元数据验证
      字节码验证
      符号引用验证
    准备 Preparation
      功能：为类的变量（静态变量，被static修饰的变量）分配内存，并设置初始值（P272）
      不包含实例变量
      初始值一般是0值
      final的初始值就是对应值，如123
    解析 Resolution
      功能
        将常量池内的符号引用替换为直接引用的过程
        符号引用：类似于给对象起的名字
        直接引用：指向目标的指针、相对偏移量或者是能间接定位到目标的句柄
      类或接口的解析
      字段解析
      方法解析
      接口方法解析
    初始化 Initialization
      功能：执行类构造器 <clinit>()的过程
      <clinit>()是javac编译器的自动生成物
      <clinit>()在多线程环境中是加锁同步的，所以如果初始化耗时很长，会阻塞其他线程
    使用 Using
    卸载 Unloading
    连接 Linking
      jvm实现
  ClassLoader
    层级结构
      BootstrapClassLoader
      ExtensionClassLoader
      ApplicationClassLoader(SystemClassLoader)
      概要
    加载过程（P283）
    双亲委派
      带有优先级的层次关系
      避免重复加载
      消除安全隐患
    破坏双亲委派
      JDK1.2
        为了兼容1.1的ClassLoader，无法技术上避免loadClass()被子类覆盖，所以新增了findClass()
      SPI
        高层加载器要请求底层加载器完成类加载行为
        解决方案：Thread Context ClassLoader
      代码热替换（HotSwap）
  JDK9的Java模块化系统
    目标：可配置的封装隔离系统（P287）
    重要变更：PlatformClassLoader替代了ExtensionClassLoader