Class加载过程

类 (加载->初始化)

  1. loading

    1. 双亲委派 出于安全 父加载器:不是类加载器的加载器
      双亲委派是一个孩子向父亲方向,然后父亲向孩子方向的双亲委派
    2. LazyLoading五种情况
    3. ClassLoader的源码
      findInCache -> parent.loadClass -> findClass()
    4. 自定义类加载器
      1. extends ClassLoader
      2. overwrite findClass() -> defineClass(byte[] -> Class clazz)
      3. 加密
    5. 混合执行 编译执行 解释执行 (检查热点代码 -XX:CompileThreshold = 10000)
  2. linking

    1. verification
      验证文件是否符合JVM规定
    2. preparation
      给静态成员变量设默认值
    3. resolution
      将类 方法 属性等符号引用解析为直接引用**
      符号引用指class文件编译常量池引用解析成具体的地址
      常量池中的各种符号引用 解析为指针.偏移量等内存地址的直接引用
  3. initializing

    调用类初始化代码给静态成员变量赋初始值

小总结

  1. load - 默认值->初始值
  2. new - 申请内存 -> 默认值 -> 初始值

DCL 为什么用valitile


===========================================================================

class文件进入内存生成了什么

1.内存里存在一块区域 二进制对象
2.生成一个class的对象(mataspace里),指向1

类加载器

类加载器范围

LazyLoading五种情况

LazyLoading五种情况

posted @ 2023-02-12 20:09  Acaak  阅读(17)  评论(0)    收藏  举报