讲透JVM类加载机制,向高手进阶!

目录:

  1. 前言
  2. JVM在什么情况下会加载一个类?
  3. 从实用角度出发,来看看验证、准备和初始化的过程
  4. 核心阶段:初始化
  5. 类加载器和双亲委派机制

1、前言

先来看一下JVM整体的一个运行原理。

我们首先从“.java”代码文件,编译成“.class”字节码文件,然后类加载器把“.class”字节码文件中的类给加载到JVM中,接着是JVM来执行我们写好的那些类中的代码,整体是这么个顺序。

我们看看下图,感受一下这个过程:

在这里插入图片描述

那么今天,我们就来仔细看看上图中的“类加载”这个过程,看看JVM的类加载机制到底是怎么样的?

搞清楚这个过程了,那么以后在面试时,对面试官常问的JVM类加载机制,就能把一些核心概念说清楚了。


2、JVM在什么情况下会加载一个类?

其实类加载过程非常的琐碎复杂,但是对于我们平时从工作中实用的角度来说,主要是把握他的核心工作原理就可以。

一个类从加载到使用,一般会经历下面的这个过程:

加载 -> 验证 -> 准备 -> 解析 -> 初始化 -> 使用 -> 卸载

所以首先要搞明白的第一个问题,就是JVM在执行我们写好的代码的过程中,一般在什么情况下会去加载一个类呢?

也就是说,啥时候会从“.class”字节码文件中加载这个类到JVM内存里来。

其实答案非常简单,就是在你的代码中用到这个类的时候

举个简单的例子,比如下面你有一个类(Kafka.class),里面有一个“main()”方法作为主入口。

那么一旦你的JVM进程启动之后,它一定会先把你的这个类(Kafka.cass)加载到内存里,然后从“main()”方法的入口代码开始执行。

在这里插入图片描述

我们还是坚持一步一图,大家先看看下图,感受一下:

在这里插入图片描述

接着假设上面的代码中,出现了如下的这么一行代码:

在这里插入图片描述

这时可能大家就想了,你的代码中明显需要使用“ReplicaManager”这个类去实例化一个对象,此时必须得把“ReplicaManager.class”字节码文件中的这个类加载到内存里来啊!是不是

所以这个时候就会触发JVM通过类加载器,从“ReplicaManager.class”字节码文件中加载对应的类到内存里来使用,这样代码才能跑起来。

我们来看下面的图:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值