Java虚拟机加载.class文件的原理
Java中的类装载是由JVM来完成的,类装载器是一个重要的Java运行时组件,主要职责是在运行时查找和装载所需的类文件。
由于Java的跨平台性,经过编译的Java源程序并不是可执行的程序,它是一个或多个类文件,当运行时需要某个类时,JVM会先确认该类是否已经被加载、连接和初始化。类的加载就是通过类加载器将.class中的数据读入到内存中,通常是创建一个字节类型的数组来存放.class文件,生成与加载类所对应的Class对象;已经被加载的类还不可用,需要对其进行连接,连接阶段主要包括验证、准备(为静态变量分配内存及初始化)和解析(将符号引用替换成直接引用);最后进行初始化,包括(1)如果该类有直接父类,且父类还未被初始化,先初始化父类构造器;(2)如果类中包含初始化语句,依次执行初始化语句。
类加载器包括:1、根加载器(Bootstrap):一般用本地代码实现,负责加载JVM基础核心类库
2、扩展加载器(Extension):从java.ext.dirs系统属性所指定的目录中加载类库,它的父加载器是Bootstrap
3、系统加载器(System):又叫应用类加载器,其父类是Extension。它是应用最广泛的类加载器,它从环境变量 classpath或系统属性java.class.path所指定的目录中记载类,是用户自定义加载器的默认父类。