虚拟机把描述类的Class文件加载到内存,并进行校验、准备、解析、初始化,形成jvm可以直接使用的类型,这被称为jvm的类加载机制。
1. 加载:根据全限定名加载二进制文件到jvm内存。
2.校验: 根据java虚拟机规范,对文件进行验证。
3. 准备: 为类变量分配初始值,在方法区分配。
4. 解析:将符号引入解析为直接引用。
5. 初始化,根据代码逻辑进行初始化。
在加载过程中,如何通过全限定名来加载二进制字节流?这是由被称为类加载器的代码模块实现的。
对于虚拟机来讲,存在两种不同的类加载器,第一种是 “启动类加载器”,为jvm自身的一部分。另一种则包括其他所有,位于jvm之外。
在类加载器中,除了启动类加载器,其余所有类加载器都有自己的父类,这样的机制被称为双亲委派机制。
它的工作流程如下:当一个类加载器收到了类加载的请求,它自己不会首先去尝试加载,而是请父类加载。只有父类无法加载的情况下,才会尝试着自己去加载。
这样做的目的是保证类的唯一性。