一.前文提要

经过前文我们的代码到底是怎么运行起来的
我们已经了解到代码是如何加载到jvm里面并运行起来。
那么问题来了,jvm什么时候会加载我们的代码呢?
一个类从加载到使用,大约经过以下几个流程
编译-》加载-》验证-》准备-》解析-》初始化-》使用-》卸载
其中标红部分是面试jvm相关必问的问题

二.JVM如何加载class文件?

上面的第一个问题,什么时候加载我们的代码?
当然是使用到的时候了,上文已经提到你的入口是main方法,那么加载这个main方法里面有哪些对象需要实例化的就加载哪些;如果听着有点绕,我们看下面的图片来一步一步解析。

JVM类加载机制你真的懂吗?
这是一个kafka的类,里面有个main方法
那么这个kafka类是不是就首先加载到jvm里面
JVM类加载机制你真的懂吗?
这时候我们对代码进行了增加了
JVM类加载机制你真的懂吗?
ReplicaManager类由于是main方法的局部变量也需要加载到jvm里面;通过类加载器加载ReplicaManager.class文件到jvm里面。
图就变成这个样子了
JVM类加载机制你真的懂吗?

三.加载之后做了啥?

验证阶段:主要验证class文件内容,是否符合jvm的规范?是否被篡改?
准备阶段:给类分配一个空间,并对静态变量(static)进行初始化
解析阶段:将符号引用转换成直接引用
初始化阶段:初始化可以理解为new了一个实例,但实际这是发生在实例化之前(初始化的时候如果发现父类没有,先初始化父类)
如图所示
JVM类加载机制你真的懂吗?

相关文章: