什么是类加载器?什么是双亲委派模型?
发布于 2024-07-17
708
版权声明
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
springboot葵花宝典
扫码关注公众号
扫码阅读
手机扫码阅读
什么是类加载器?什么是双亲委派模型?
1. 什么是类加载器,类加载器有哪些?
类加载器是用于将字节码文件加载到JVM中,使Java程序得以启动。它是java.lang.ClassLoader的子类,负责找到或生成指定类的字节码文件,同时加载程序所需的资源。
类加载器分为四种类型:
- 启动类加载器(BootStrap ClassLoader):由C++编写,加载JAVA_HOME/jre/lib目录下的类库。
- 扩展类加载器(ExtClassLoader):加载JAVA_HOME/jre/lib/ext目录中的类库。
- 应用类加载器(AppClassLoader):加载classPath下的类,即开发者编写的Java类。
- 自定义类加载器:开发者自定义的类加载规则。
2. 什么是双亲委派模型?
双亲委派模型是一种类加载机制。当类加载器接到加载请求时,优先将请求委派给父类加载器,递归至顶层的启动类加载器。如果父类加载器无法完成加载,则由子类加载器尝试加载。这种机制确保了类加载过程的安全性和唯一性。
3. JVM为什么采用双亲委派机制?
JVM采用双亲委派机制主要基于两个原因:
- 避免重复加载:通过父类加载器加载的类无需重复加载,确保唯一性。
- 安全性保障:防止核心API库被恶意篡改。例如,尝试自定义java.lang.String类会因双亲委派机制导致加载失败。
4. 类装载的执行过程
类的生命周期包括以下七个阶段:
- 加载:获取类的二进制数据流,并解析为方法区内的数据结构,同时生成java.lang.Class实例。
- 验证:检查类文件是否符合JVM规范,包括文件格式、元数据、字节码和符号引用验证。
- 准备:为类变量分配内存并设置初始值,static变量的赋值处理在准备或初始化阶段完成。
- 解析:将符号引用转换为直接引用。
- 初始化:执行静态变量和静态代码块的初始化操作,优先初始化父类。
- 使用:JVM执行用户程序代码,调用静态成员或实例化对象。
- 卸载:程序结束后,销毁创建的Class对象,JVM退出内存。
5. 类加载器面试问题
面试常见问题:
- 类加载器有哪些? JVM运行二进制文件,常见类加载器包括启动类加载器、扩展类加载器、应用类加载器和自定义类加载器。
- 类装载执行过程? 类从加载到卸载经历加载、验证、准备、解析、初始化、使用和卸载七个阶段。
- 双亲委派模型是什么? 类加载请求依次委派至父类加载器,只有父类无法加载时,子类加载器才尝试加载。
- JVM为何采用双亲委派机制? 避免类重复加载,确保唯一性;防止恶意篡改核心API库。
springboot葵花宝典
springboot葵花宝典
扫码关注公众号
还在用多套工具管项目?
一个平台搞定产品、项目、质量与效能,告别整合之苦,实现全流程闭环。
查看方案
springboot葵花宝典的其他文章
分布式事务:CAP与BASE,解读分布式系统的一致性与可用性
分布式事务的目标是确保所有参与的节点在执行事务时遵循原子性、一致性、隔离性和持久性(ACID)的特性。
Sentinel安装和项目整合Sentinel
Sentinel安装和项目整合Sentinel
Java程序员易踩的坑及解析
Java程序员易踩的坑及解析
Nacos:打造你的爆款配置中心
,今天我想向大家介绍一个当下最热门的配置中心——Nacos。作为一个高性能、可扩展的开源配置中心,Nacos 在开发人员和运维人员中都越来越受欢迎。在本文中,我们将深入了解 Nacos 的特点和功能,以及如何使用它来实现配置的集中管理。
云存储解决方案-阿里云OSS
阿里云对象存储服务(Object Storage Service,简称OSS)为您提供基于网络的数据存取服务。使用OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种非结构化数据文件。
加入社区微信群
与行业大咖零距离交流学习
PMO实践白皮书
白皮书上线
白皮书上线