Java类加载机制
Java的类加载过程分为三个主要步骤:加载、链接、初始化。
第一阶段是加载,它是Java将字节码数据从不同的数据源读取到JVM中,并映射为JVM认可的数据结构(Class对象)。(加载阶段是用户参与的阶段,我们可以自定义类加载器,去实现自己的类加载过程)
第二阶段是链接,这一步骤是核心,简单的讲就是把原始的类定义信息平滑地转化为JVM运行的过程中。这里可进一步细分为三个步骤:
-验证:这是虚拟机安全的重要保障,JVM需要核验字节信息时符合Jav虚拟机规范的,否则就被认为是VerifyError,这样就防止了恶意信息或者不合规的信息危害JVM的运行,验证阶段有可能触发更多的class的加载。
-准备:创建类或接口中的静态变量,并初始化静态变量的初始值。
-解析:在这一步会将常量池中的符号引用替换为直接引用。
第三阶段是初始化,这一步真正去执行类初始化的代码逻辑,包括静态字段复制的动作,以及执行类定义中的静态初始化代块内的逻辑,编译器在编译阶段就会把这部分逻辑整理好,父类型的初始化逻辑优先于当前类型的逻辑。
双亲委派模型:简单的说就是当类加载器试图加载某个类型的时候,除非父加载器找不到相应类型,否则尽量将这个任务***给当前加载器的父加载器去做。使用委派模型的目的是避免重复加载Java类型。

