类生命周期
类加载机制
- 加载
获取类二进制流,静态结构转化为方法区的运行时存储结构,内存生成该类的Class对象,作为方法区这个类的各种数据的访问入口
- 验证
确保该类文件符合JVM要求进行各种验证:文件格式,元数据,字节码,符号引用
- 准备
方法区内存分配static变量空间,初步原始初始化,不会实例化变量,static final常量会进行初始化数值
- 解析
将常量池的符号引替换为直接引用过程
- 初始化
根据表达式初始化
- 使用
- 卸载
类加载器
- 启动类加载器
Bootstrap ClassLoader
- 扩展类加载器
Extension ClassLoader
- 应用类加载器
Application ClassLoader
双亲委派模型
先尝试加载父类,依次向上请求
如果一个类加载器收到了类加载的请求,首先不会自己去尝试加载,而是把这个请求委派给父类加载器,每一个层次的加载器都是如此,依次递归,因此所有请求都是从顶层加载器->启动类加载器中开始,只有当父加载器反馈自己无法完成此加载时,子加载器才会尝试自己加载
- 好处
如果没有双亲委派模型,各个类自行加载,那么可能同一个Object类会出现多个不同的Object类,非常混乱,双亲委派模型提供了一种优先级层次关系,无论哪个类加载器要加载这个类,最终都会交到最顶端的启动类加载器进行加载,使得这个类在各种类加载器环境中都是同一个类。
网友评论