java类加载器
类加载器作用:将.class文件加载到内存 生成java.lang.Class对象
* 类加载:
* 类的加载
* 1Class文件读入内存,并创建一个java.long.Class对象
* 2任何类被使用时,系统都会创建一个java.long.Class对象
* 类加载器ClassLoader 负责加载类对象
* 父Bootstrap class loader :虚拟机的内置类加载器,通常为null,并且没有父null 方法:ClassLoader getSystemClassLoader()返回用来委托的系统类加载器 getParent()返回父类加载器进行委托
* 子Platform class loader
* 孙System class loader
* 类的连接
* 验证阶段:检验被加载的类是否有正确的内部结构,并和其他类协调一致
* 准备阶段:负责为类的类变量分配内存,并设置初始化默认值
* 解析阶段:将类的二进制数据中的符号引用替换为直接引用
* 类的初始化
* 主要是对类变量初始化
* 1.类并未加载和连接,程序会先加载并连接该类
* 2.该类直接父类未被初始化,则先初始化直接父类(会对父类执行1-3步骤)
* 3.加入类中有初始化语句,则系统依次执行这些初始化语句
* 时机:
* 创建类实例
* 调用类方法
* 访问类或者接口的类变量,或者为该类赋值
* 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象
* 初始化某个类的之类
* 直接使用java.exe命令来运行某个主类
* JVM的类加载机制:
* 1全盘负责:当一个类加载器负责加载某个Class时,该Class所依赖的和引用的其他Class也将由该类加载器负责载入 除非显示使用另一个类加载器来载入
* 2父类委托:当一个类加载器负责加载某个Class时,先让父类加载器尝试加载该Class,只有在父类加载器无法加载该类才尝试在自己路径加载该类
* 3缓存机制:保证所有加载过的Class都会被缓存,当程序需要使用某个Class对象时,类加载器先在缓存区搜索该Class,只有找不到缓存区Class对象,系统才会读取该类对应二进制数据,并将其转换为Class对象,存储到缓存区
BootStrapClassLoader是ExtentionClassLoader的父类,默认负责%JAVA_HONE%lib文件夹下的jar包和class类。
ExtentionClassLoader是ApplicationClassLoader的父类,默认负责%JAVA_HONE%lib文%etc件夹下的jar包和class类。
ApplicationClassLoader是自定义类加载器的父类,负责加载classpath下的类文件。