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

1. 什么是JVM

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

JVM的前世今生之类加载过程_第1张图片

2. 类加载过程

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

JVM的前世今生之类加载过程_第2张图片

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 双亲委托机制

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

JVM的前世今生之类加载过程_第3张图片

你可能感兴趣的:(jvm,jvm)