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 @   Acaak  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示