Class加载过程
类 (加载->初始化)
-
loading
- 双亲委派 出于安全 父加载器:不是类加载器的加载器
双亲委派是一个孩子向父亲方向,然后父亲向孩子方向的双亲委派 - LazyLoading五种情况
- ClassLoader的源码
findInCache -> parent.loadClass -> findClass() - 自定义类加载器
- extends ClassLoader
- overwrite findClass() -> defineClass(byte[] -> Class clazz)
- 加密
- 混合执行 编译执行 解释执行 (检查热点代码 -XX:CompileThreshold = 10000)
- 双亲委派 出于安全 父加载器:不是类加载器的加载器
-
linking
- verification
验证文件是否符合JVM规定 - preparation
给静态成员变量设默认值 - resolution
将类 方法 属性等符号引用解析为直接引用**
符号引用指class文件编译常量池引用解析成具体的地址
常量池中的各种符号引用 解析为指针.偏移量等内存地址的直接引用
- verification
-
initializing
调用类初始化代码给静态成员变量赋初始值
小总结
- load - 默认值->初始值
- new - 申请内存 -> 默认值 -> 初始值
DCL 为什么用valitile
===========================================================================
class文件进入内存生成了什么
1.内存里存在一块区域 二进制对象
2.生成一个class的对象(mataspace里),指向1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了