面试(类加载器)

news/2024/6/17 10:04:54 标签: 面试, 职场和发展

一、目标

类加载器(ClassLoader)是Java虚拟机(JVM)的一部分,用于加载Java类文件到内存中,并生成对应的Class对象。类加载器负责在运行时查找和加载类文件,为Java程序提供动态加载和运行时扩展的功能。

二、类型

2.1、启动类加载器(Bootstrap ClassLoader)

也称为根加载器,它是JVM内嵌的加载器,负责加载Java核心类库(如java.lang包中的类)和其他需要在JVM启动时就被加载的类。它是所有其他类加载器的父加载器。由于是用C++实现的,因此在Java代码中无法直接获取到启动类加载器的引用。

2.2、扩展类加载器(Extension ClassLoader):

它是由sun.misc.Launcher$ExtClassLoader实现的,负责加载Java的扩展类库(如javax包中的类)。它是由启动类加载器加载的,并且是应用类加载器的父加载器。

2.3、应用类加载器(Application ClassLoader)

也称为系统类加载器,它是由sun.misc.Launcher$AppClassLoader实现的,负责加载应用程序的类。应用类加载器是用户自定义的类加载器的默认父加载器。

三、加载策略

3.1、问题

解决类的加载顺序、一致性、可靠性、唯一性等;

3.2、双亲委派机制

双亲委派机制(Delegation Model)是Java类加载器的一种加载策略,它定义了类加载器在加载类时的行为和优先级。

双亲委派机制的基本思想是:当一个类加载器需要加载一个类时,它首先将加载请求委派给父类加载器,只有当父类加载器无法加载该类时,才由自身加载器进行加载。这个过程会一直循环,直到顶层的启动类加载器。如果所有的父类加载器都无法加载该类,最终由子类加载器加载。

3.3、优势

1、避免类的重复加载:每个类加载器都有自己的命名空间,当父类加载器已经加载了一个类,子类加载器无需重新加载,直接使用父类加载器加载的类,避免了重复加载。

2、提供类加载的安全性和一致性:通过双亲委派机制,类加载器会沿着加载链向上委派加载请求,保证了加载的类来自于同一个源,确保了类的安全性和一致性。

3、确保核心类的一致性:由启动类加载器加载的核心类库是Java虚拟机的一部分,能够保证在不同的Java应用中,加载的核心类库是一致的。

需要注意的是,双亲委派机制并不是强制性的,可以通过自定义类加载器绕过双亲委派机制,实现特定的加载逻辑,例如热部署等需求。

双亲委派机制在Java中的应用非常广泛,不仅用于加载Java核心类库,还用于加载应用程序的类。它确保了类的加载按照优先级和一致性进行,提供了类加载的可靠性和安全性。


http://www.niftyadmin.cn/n/5017394.html

相关文章

深度学习常用的Python库(核心库、可视化、NLP、计算机视觉、深度学习等)

(1)核心库与统计:Numpy、Scipy、Pandas、StatsModels。 (2)可视化:Matplotlib、Seaborn、Plotly、Bokeh、Pydot、Scikit-learn、XGBoost/LightGBM/CatBoost、Eli5。 (3)深度学习&a…

黑马JVM总结(四)

(1)本地方法栈 Java虚拟机调用本地方法时,给本地方法提供的一个内存空间,本地方法它是指哪些不是由java代码编写的方法 java代码有一定限制,它有时候不能直接跟操作系统底层打交道,需要用c和c语言编写的本…

基于堆叠⾃编码器的时间序列预测 深层神经网络

自适应迭代扩展卡尔曼滤波算法(AIEK)是一种滤波算法,其目的是通过迭代过程来逐渐适应不同的状态和环境,从而优化滤波效果。 该算法的基本思路是在每一步迭代过程中,根据所观测的数据和状态方程,对滤波器的…

day36 接着讲线程

java中 线程分为两类:用户线程和守护线程 默认我们创建的都是用户线程 * 先查看线程是什么类型通过isDaemon()方法判断 * * 守护线程 称为后台线程 或者 服务线程 * 当程序中所有用户线程全部执行在一起,守护线程也会随之结束 * …

[论文笔记]BiMPM

引言 这又是一篇文本匹配的论文Bilateral Multi-Perspective Matching for Natural Language Sentences阅读笔记。 论文题目为自然语言文本中双向多视角匹配。 提出了BiMPM(bilateral multi-perspective matching)模型: 基于匹配-聚合(比较-聚合)框架; 采用双向匹配提取交…

《深度学习初探:使用TensorFlow和Keras构建你的第一个神经网络》

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

第22节-PhotoShop基础课程-模糊工具

文章目录 前言1.模糊工具 涂抹的区域变模糊2.锐化工具 提高清晰度3.涂抹工具 像素混合 前言 此模糊非滤镜里面的模糊 1.模糊工具 涂抹的区域变模糊 把局部区域模糊 2.锐化工具 提高清晰度 和锐化工具相反 3.涂抹工具 像素混合 修复边缘

Ubuntu22.04_如何调试ROS2_humble的源代码

这里的源码,是指的ros2 humble的官方源码。如果是自己手撸的节点或相关源码,请参考本人以前的贴子, Ubuntu20.04vscode快速调试ROS通用程序_ubuntu20.04vscode那个版本和ros 兼容_高精度计算机视觉的博客-CSDN博客 Ubuntu20.04+…