JVM类加载机制你真的懂吗?

一.前文提要

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

二.JVM如何加载class文件?

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

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

三.加载之后做了啥?

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值