类加载过程
类加载过程:加载->连接->初始化。连接过程⼜可分为三步:验证->准备->解析。
装载:根据查找路径找到相对应点的class文件,然后导入。
连接:连接可以分为三个小的步骤。
检查:检查待加载的class文件的正确性。
准备:给类中的静态变量分配存储空间。
解析:将符号引用转换成直接引用。
初始化:对静态变量和静态代码块执行初始化工作。
类加载器
JVM提供了3种类加载器,分别是启动类加载器、扩展类加载器和应用程序类加载器。
启动类加载器:负责加载Java_HOME/lib目录下的类库,或通过-Xbootclasspath参数指定路径中被虚拟机认可的类库。
扩展类加载器:负责加载Java_HOME/lib/ext目录中的类库,或者通过java.ext.dirs系统变量加载指定路径中的类库。
应用程序类加载器:负责加载classpath(用户路径)上的类库。
双亲委派机制
JVM通过双亲委派机制对类进行加载。双亲委派机制的核心是保障类的唯一性和安全性。
双亲委派机制是指一个类在收到类加载请求后不会尝试自己加载这个类,而是把类加载请求向上委派给其父类去完成,其父类在接收到该类加载请求后又会将其委派给自己的父类,以此类推,这样所有的类加载请求都被向上委派到启动类加载器中。若父类加载器在收到类加载请求后发现自己无法加载该类,则父类会将该信息反馈给子类并向下委派子类加载器加载该类,直到该类被成功加载,若找不到该类,则JVM会抛出ClassNotFound异常。