- 类的生命周期由七个部分组成,前五个阶段为类的加载过程;
- 负责从文件系统或者网络系统加载class文件,类加载子系统只负责加载class文件,具体文件是否可以执行则由执行引擎决定
加载
- 通过一个类的全限定名获取定义此类的二进制字节流,通过类加载器,将class文件加载到类装载子系统
- 将这个字节流所代表的静态存储结构转化为方法区(元空间)的运行时数据结构
- 在内存中生成一个代表这个类的java.lang.Class对象(此环节已经生成Class对象),作为方法区这个类的各种数据的访问入口
- 通过类的全限定名获取存储该类的class文件,没有指定从哪里获取
a. 从压缩包中读取,如jar、war
b. 从网络中获取,如Web Applet
c. 动态生成,如动态代理、CGLIB
d. 由其他文件生成,如JSP
e. 从数据库读取
f. 从加密文件中读取
加载时机
- new ,getstatic ,putstatic ,invokestatic
- 反射
- 初始化一个类的子类会去加载其父类
- 启动类(main函数所在的类)
验证
确保Class文件的字节流中包含的信息符合当前虚拟机的要求,保证被加载类的正确性,