前言
昨天说今天更新一些jvm的内容。jvm的类加载模型在jdk9发生过变化。现在我们从jdk7以前开始谈起,聊一聊jvm的类加载机制。
标题上的内容在最后,只想看变化的往后翻。
文中内容大量取自 周志明 深入理解jvm 第三版
类加载的时机
.class文件平常是躺在磁盘上的,而我们需要使用它的时候就需要把它加载到内存中去,当我们不再使用它就应该把它卸载。
一个类从加载到虚拟机开始直到卸载需要经历以下过程:
loding 加载
loading的过程将字节码文件以二进制字节流读入内存,把其中定义的内容转化为方法区(Method Area)中的运行时数据结构,然后生成一个代表这个class的java.lang.Class对象,我们在编程时就可以通过这个对象来访问方法区中定义的类数据
linking 这一步分为三个阶段,直接解释为链接
verification 验证: 当然了,加载需要判断这个.class文件的格式到底符不符合规范,判断一下其中有没有恶意代码等等
preparation 准备: 现在我们的.class文件通过了验证这一步,在preparation这里jvm会给类中定义的static变量分配内存并设置初始值,