JVM类加载机制笔记
JVM类加载过程包括5个阶段(7个部分):加载、检验、准备、解析、初始化、(使用、卸载)。

加载:查找并加载类的二进制文件。在这个阶段主要做三件事情:
连接
验证:检验被加载的类的正确性,属于连接阶段的第一步,目的是为了确保加载的Class文件的字节流包含的信息符合JVM的要求,不会危害到JVM自身的安全性。
准备:为类的静态变量分配内存,并将其初始化为默认值。
解析:把类中的符号引用转换为直接引用。
初始化:为类的静态变量赋予正确的初始值,JVM负责对类进行初始化,主要是对类变量进行初始化。

类加载器
包括:启动类加载器(Bootstrap ClassLoader)、扩展类加载器(ExtClassLoader)、应用类加载器(AppClassLoader)。
启动类加载器:负责加载存放在JDK\jre\lib(JDK代表JDK的安装目录,下同)下,或被-Xbootclasspath参数指定的路径中的,并且能被虚拟机识别的类库(如rt.jar,所有的java.*开头的类均被Bootstrap ClassLoader加载)。启动类加载器是无法被Java程序直接引用的。
扩展类加载器:由sun.misc.Launcher$ExtClassLoader实现,它负责加载DK\jre\lib\ext目录中,或者由java.ext.dirs系统变量指定的路径中的所有类库(如javax.*开头的类),开发者可以直接使用扩展类加载器。
应用类加载器:由sun.misc.Launcher$AppClassLoader来实现,它负责加载用户类路径(ClassPath)所指定的类,开发者可以直接使用该类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。