JVM类加载及双亲委派模型

前言

JVM类加载这些很多原理,我们称之为八股文,我们在写代码时一般都涉及不到这些内容,但是由于我们面试中,会被考察到,所以此篇就为大家详细介绍一下JVM类加载的过程 以及高频面试题双亲委派模型

JVM类加载的过程

1.加载

找到.class文件,代码中先见到类的名字,然后进一步的找到对应的.class文件(涉及到一系列的目录查找的过程)打开并读取文件内容

2.验证

验证读到的.class文件是否合法,Java标准文档中明确定义了 .class文件的格式是什么样的

合法才会正常类加载,否则会出现错误

3.准备

分配内存(此时全为零)未初始化的内存空间

4.解析

在类加载的 "加载" 阶段,JVM 会把 class 文件读入内存,并生成一个代表这个类的 Class 对象。但此时,类中用到的其他类、方法、字段,还只是以字符串名字的形式存在于常量池里,此时直到目前,这些类中的内容仍是以字符串的形式存在于常量池,此步就是把这些字符串名字与他们对应的地址联系起来

针对字符串常量进行初始化,解析阶段,就是把这些 "名字" 变成 "地址" 的过程

5.初始化

针对类对象进行填充,也会触发父类的类加载(如果父类未加载过)赋值

类加载的触发时机

java代码中,用到哪个类,就会触发哪个类的加载

1.构造这个类的实例

2.调用/使用类静态属性/静态方法

3.使用某类时候,如果他的父类也未加载,也会触发父类的加载

双亲委派模型

JVM默认提供了三种类加载器

1.BootstrapClassLoader Java标准库目录 "爷"

2.ExtensionClassLoader Java拓展库目录 "父"

3.ApplicationClassLoader Java第三方库目录 "子"

双亲委派模型就是 在.class文件的查找时,就会通过ApplicationClassLoader也就是"子"作为入口开始,将加载类这样的任务交给 ExtensionClassLoader "父"来加载,但"父"也会将任务交给BootstrapClassLoader "爷"来加载类,因为"爷"上面没有可委托的,此时"爷"就会进行类加载,如果没找到,就交给"父"来进行类加载,如果还没找到 在交给"子"来进行类加载,如果还没找到就会报错

相关推荐
guodingdingh25 分钟前
软件开发工作问题总结0718
java·开发语言·数据库
咖啡八杯2 小时前
GoF设计模式——解释器模式
java·后端·spring·设计模式
优橙教育2 小时前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
糖果店的幽灵3 小时前
【DeepAgents 从入门到精通】Context Management 上下文管理
java·人工智能·后端·spring·中间件·langgraph·deepagents
腻害兔4 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:字典、短信、邮件、通知——后台系统的“基础设施四件套“!
java·前端·vue.js·产品经理·ai编程
碎光拾影4 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
Miao121315 小时前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言
腻害兔5 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:支付模块 yudao-module-pay,一个让产品经理都看懂的支付中台设计
java·前端·vue.js·产品经理·ai编程
CRMEB系统商城6 小时前
开源自建还是SaaS订阅?算一笔3年经济账
java·大数据·开发语言·开源
keyipatience8 小时前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu