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

1. 什么是JVM

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

2. 类加载过程

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

2.1 加载

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

2.2 验证

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

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

2.3 准备

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

2.4 解析

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

2.5 初始化

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

2.6 使用

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

2.7 卸载

即在内存中销毁类

3. 类加载器

3.1 类加载器分类
  • 启动类加载器:jvm启动的时候,会优先加载jre\lib这个目录的核心类库。

  • 扩展类加载器:负责加载jre\lib\ext这个目录的类。

  • 应用程序类加载器:负责加载我们写的代码。

  • 自定义类加载器:根据我们的需要,加载特定的类。

3.2 双亲委托机制

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码搬运工阿新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值