1.类的加载(加载到JVM), class文件通过类加载器加载到内存。
类加载全过程:加载Class对象---连接(1.验证(安全和规范),2.准备(分配内存),3.解析(将类中的符号引用转换成直接引用))---初始化---使用---卸载
类加载器使用的加载模式:双亲委托机制
1、当AppClassLoader加载一个class时,它首先不会自己去尝试加载这个类,而是把类加载请求委派给父类加载器ExtClassLoader去完成。
2、当ExtClassLoader加载一个class时,它首先也不会自己去尝试加载这个类,而是把类加载请求委派给BootStrapClassLoader去完成。
3、如果BootStrapClassLoader加载失败(例如在$JAVA_HOME/jre/lib里未查找到该class),会使用ExtClassLoader来尝试加载;
4、若ExtClassLoader也加载失败,则会使用AppClassLoader来加载
5、如果AppClassLoader也加载失败,则会报出异常ClassNotFoundException
类加载器:
BootStrapClassLoader 启动类加载器 负责jre/lib/rt.jar
ExtClassLoader 扩展类加载器 jre/lib/*.jar或-Djava.ext.dirs
AppClassLoader 应用类加载器 记载classpath中指定的jar包及目录中class
UserClassLoader 自定义的类加载器 继承ClassLoader getClass().ClassLoader()可以获得