类加载子系统
一、类加载子系统的作用
1)类加载子系统负责将 .class 字节码文件加载进内存,他只负责加载,至于字节码文件是否能运行则有执行引擎(Execution Engine)决定。
2)加载的类消息存放于方法区,称为元数据模板,类实例化的过程是通过元数据模板实例化出n个一模一样的实例。
二、加载过程
类的加载过程主要分为三个阶段:加载、链接、初始化。
1、加载
1)通过类的全限定名获取类的二进制字节流。
2)将字节流静态的存储结构转化为动态的运行时结构。
3)在内存中生成一个代表这个类的java.lang.class对象,存放与方法区中,作为这个类的访问入口。
2、链接
1)验证:校验class文件的的字节流是否符合虚拟机要求,是否会损害虚拟机。
2)准备:为类变量分配内存以及赋初始值(0 ,null等)
注意:final static 修饰的变量在编译时就已经赋值了,所以不在这里赋值。
3)解析:将符号引用转化为直接引用
3、初始化
初始化阶段主要就是执行类对clinit()方法,该方法主要是进行类变量的赋值以及执行静态代码块的代码。
三、类加载器的分类
JVM