JVM的前世今生之类加载过程

亦凉 2023-10-14 22:05 41阅读 0赞

1. 什么是JVM

VM是JavaVirtualMachine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。它可以实现跨操作系统运行,即一处编译到处运行。下图是JVM的运行过程

956d94f0c7ef401e85083b1826af81c5.png

2. 类加载过程

类加载的过程分为 7 个阶段:加载、验证、准备、解析、初始化、使用、卸载。

0a19e3a94d8749948443de61ca9f03d3.png

2.1 加载

所谓加载,简而言之就是将 Java 类的字节码文件加载到机器内存中,并在内存中构建出 Java 类的原型——类模板对象

2.2 验证

验证是连接阶段的第一步,目的是保证加载的字节码是合法的。

验证阶段包含 4 个动作:文件格式验证、元数据验证、字节码验证和符号引用验证。

2.3 准备

准备是连接阶段的第二步,目的是为静态变量(被 static 修饰的变量)分配内存,初始化默认值。

2.4 解析

解析是连接阶段的第三步,目的是将接口、变量、方法的符号引用转换为直接引用。

2.5 初始化

初始化是类加载过程的最后一个步骤,就是执行类构造器 () 方法的过程。在此阶段,JVM 会执行执行类中编写的Java程序代码,对类的静态变量,静态代码块执行初始化操作。

2.6 使用

顾名思义,就是类的使用,例如使用new关键字实例化类

2.7 卸载

即在内存中销毁类

3. 类加载器

3.1 类加载器分类
  • 启动类加载器:jvm启动的时候,会优先加载jre\lib这个目录的核心类库。
  • 扩展类加载器:负责加载jre\lib\ext这个目录的类。
  • 应用程序类加载器:负责加载我们写的代码。
  • 自定义类加载器:根据我们的需要,加载特定的类。
3.2 双亲委托机制

所谓双亲委托,即加载器收到类加载请求时,先会委托给自己的父类处理,如果父类还有父类则会继续向上委托直到委托到启动类加载器处理,如果启动类加载也处理不了,则就会向下交给子类加载器自己处理,如果子类加载器自己也处理就继续交给下级子类加载器处理,直到加载该类类加载器处理

28f84163663d4547a6045ee9c6171c7c.png

发表评论

表情:
评论列表 (有 0 条评论,41人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JVM之类过程

    当我们在Java代码中写下new String()的时候,我们理所当然认为java会返回给我们一个String对象,但是在JVM背后做了很多事情,包括类的加载、对象内存的分配等

    相关 JVM 之 类

    1.类加载 虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,解析和初始化, 最终形成可以被虚拟机直接使用的java类型。 2.加载机

    相关 JVM之类

    类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示: ![classonloa