类的加载机制
类的生命周期
加载 -> 验证 -> 准备 -> 解析 -> 初始化 -> 使用 -> 卸载
加载:
- 获取类的二进制字节流
- 静态储存区转为数据结构
- 生成一个Class对象,作为方法区各种数据的访问入口
验证:
- 文件格式验证
- 版本验证
- 元数据验证
- 字节码验证
- 符号引用验证
准备:
- 为变量分配内存空间,设置初始值
解析:
- 符号引用
- 直接引用
- 类或接口的解析
- 字段解析
- 类方法解析
- 接口方法解析
初始化:
- 类构造器
()
类加载器:
- Bootstrap ClassLoader
- 自定义类加载器
双亲委派模型:
//辣鸡翻译,这里面只有父与子之间的关系,哪来的双亲
简单的说就是如果一个类加载器收到了加载类的指令,自己并不会马上加载,而是先交给父类加载器,只有父类反馈没有加载到,子加载器才会去加载,这样的好处就是保证了Java类型体系的基础,保证了多平台的安全
破坏双亲委派模型:
这个是各种黑科技的基础,热更新热修复
Thread Context ClassLoader(线程上下文类加载器)偷偷开的后门