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
类加载器

类加载器范围

LazyLoading五种情况



浙公网安备 33010602011771号