JVM类加载
什么是类的加载
将.class文件中的内容,读入到运行时数据区的方法区中 , 然后在堆中创建一个java.lang.Class对象指向方法区
类的生命周期
生命周期分为5个阶段 : 加载、验证、准备、解析、初始化
- 加载
1、通过一个类的全限定名来获取其定义的二进制字节流。 2、将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。 3、在Java堆中生成一个代表这个类的java.lang.Class对象,作为对方法区中这些数据的访问入口。
- 验证
文件格式验证:验证符合Class文件格式的规范,例如:常量池中的常量是否有不被支持的类型
元数据验证:验证符合Java语言规范的要求, 例如:这个类是否有父类,除了java.lang.Object之外
字节码验证:
符号引用验证:确保解析动作能正确执行
- 准备
1、为类变量分配空间 2、设置默认值
- 解析
对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符7类符号引用进行
- 初始化
对类变量进行初始化
类加载器
启动类加载器 Bootstrap ClassLoader
扩展类加载器 Extension ClassLoader
应用程序类加载器 Application ClassLoader : 程序中默认的类加载器
类加载机制
- 全盘负责
- 双亲委派
请求父类去加载, 当该class不在父类的搜索范围内, 则自己加载 ,若自己也找不到,则抛出异常ClassNotFoundException
-
缓存机制
程序中主动触发类加载
- 通过Class.forName()方法动态加载
- 通过ClassLoader.loadClass()方法动态加载
祝:
大家生活愉快,工作顺利