首先盗张图,哈哈哈哈,盗了不少师兄的图哇,感觉画的很棒!(向师兄学习!)
一、类加载机制是什么?
我们知道源程序编译完了之后会把生成的字节码文件保存的信息加载到虚拟机内存当中。这过程中会经过验证、准备、解析、初始化。最后会形成一种能被java虚拟机使用的类型,这就是类加载机制。当然了,我们使用完了之后也是要卸载了的,就是把它清理出去。这张图能看到class文件里面的信息从进入虚拟机到被使用再到被卸载的过程:
二、下面我们来详细的解析一下这张图:
1.加载: 加载的时候虚拟机做的三个事情
通过全限名来获取class文件中的二进制流
将二进制流中代表的静态存储结构转化为方法区中的运行时数据结构
在内存中产生class对象
连接阶段:
2.验证:验证主要是看看二进制中的信息是否符合规范,防止危害虚拟机。
主要验证过程有:文件格式验证(符合规范之后二进制流才会进入方法区进行存储)、元数据验证(对类的元数据信息进行语义校验)、字节码验证(对类内部方法体进行校验)、符号引用验证(确保解析动作能正常执行)
3.准备:准备阶段是为类变量分配内存并设置类变量初始值阶段。
4.解析:解析阶段是一个把常量池中的符号引用转化为直接引用的过程。其中包括类或接口的解析、字段解析、接口方法解析。
5.初始化:初始化是执行<clinit>的过程。其中<clinit>方法是由编译器在自动收集所有的类变量的赋值动作、静态语句块中的语句合并产生的。
三、类加载器:
类加载器在JVM的外部的代码模块,它的作用是根据全限名来获取描述这个类的二进制字节流。
对于任何一个类都由这个类和类加载器来确立在JVM中的唯一性,假如说,用加载器A和加载器B加载同一个class文件,那么他们生成的类就是不相等的。