JVM知识总结(类加载器)

news2024/11/16 4:25:01

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

在这里插入图片描述

类加载器

Bootstrap引导类加载器

引导类加载器也被称为启动类加载器或根类加载器,指BootstrapClassLoader

引导类加载器使用C++语言实现,是JVM自身的一部分,主要负责将<JAVA_HOME>\lib路径下的核心类库或-Xbootclasspath参数指定的路径下的jar包加载到内存中。

Extension拓展类加载器

位于HotSpot源码目录中的sun.misc.Launcher$ExtClassLoader位置。

它主要负责加载<JAVA_HOME>\lib\ext目录下或者由系统变量-Djava.ext.dir指定位路径中的类库。

Application系统类加载器

位于HotSpot源码目录中的sun.misc.Launcher$AppClassLoader位置。

它负责加载系统类路径java -classpath-D java.class.path指定路径下的类库,也就是classpath`路径。

该类加载器是程序的默认类加载器,可以通过ClassLoader.getSystemClassLoader()方法可以直接获取到它。

自定义类加载器

如果需要自定义类加载器,只需要继承ClassLoader类,但继承ClassLoader需要自己重写findClass()方法并编写加载逻辑。

线程上下文类加载器

很多服务提供者接口(Service Provider Interface,SPI),这些接口允许第三方为它们提供实现,如常见的SPIJDBC、JNDI等,这些SPI的接口属于Java核心库,一般存在rt.jar包中,由启动类加载器(Bootstrap)加载,而SPI的第三方实现代码则是作为Java应用所依赖的jar包被存放在classpath路径下。

由于SPI接口中的代码需要加载第三方实现类并调用其相关函数,但SPI的核心接口类是由启动类加载器(Bootstrap)加载的,Bootstrap加载器无法直接加载SPI的实现类。

SPI提供了一种动态的服务发现机制(约定),只要第三方在编写实现类时,在工程内新建一个META-INF/services/目录并在该目录下创建一个与服务接口名称同名的文件,那么在程序启动的时候,就会根据约定去找到所有符合规范的实现类,然后交给线程上下文类加载器进行加载处理。

线程的上下文类加载器默认设置的就是系统类加载器(System)。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2034269.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机系统基础知识:数据表示及运算

计算机系统基础知识 1. 计算机系统基本组成2. 数据表示及运算2.1 数据表示进位计数值及其转换机器数和码制定点数和浮点数十进制编码ASCII码汉字编码Unicode 2.2 校验码2.3 逻辑代数及运算2.4 机器数的运算机器数的加减运算机器数的乘除运算浮点运算 1. 计算机系统基本组成 计…

opencv-python图像增强二:图像去雾(暗通道去雾)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、简介&#xff1a;二、暗通道去雾方案简述&#xff1a;三、算法实现步骤3.1最小值滤波3.2 引导滤波3.3 计算图像全局光强 四&#xff1a;整体代码实现五&#xf…

iLight混合点光源 激光与LED技术的结合

51camera机器视觉产品资料查询平台的光源种类比较丰富&#xff0c;今天我们一起来看看其合作厂商iCore的明星产品iLight混合点光源&#xff0c;该产品提供了比LED更高的亮度&#xff0c;作为传统LED和氙气灯的替代品&#xff0c;它将激光和LED技术的结合&#xff0c;提供了长达…

创建vscode debug环境

c语言或者其他语言在 字符串指针使用细节很多&#xff0c;你不能编译整个镜像下载在设备里来调试。这些在一个.c文件里需要验证的细节&#xff0c;可以在vscode里创建一个main函数调试 1&#xff0c;环境创建 主要参考下面链接&#xff1a; 如何在VScode中让printf输出中文…

【项目】基于Vue2+Router+Vant 前端面经项目

环境配置 Vue脚手架的创建 在终端中打开输入 vue create 项目包名 -m npm注意⚠️&#xff1a;项目名称不再允许包含大写字母。 选择第三项 3.选择要安装的模块 从上到下的功能模块&#xff1a; Babel - ES&#xff1a;降级处理Router-Vue&#xff1a;路由插件CSS预处理器E…

基于STM32开发的智能家居照明控制系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 家庭照明自动化节能照明管理常见问题及解决方案 常见问题解决方案结论 1. 引言 智能家居照明控制系统通过整合各种传感器和控制器&#xff0c;能够实现对家居照…

[全文]买椟还珠和坏事变好事?《分析模式》漫谈19

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 “Analysis Patterns”的第一章有这么一句&#xff1a; Modeling in a programming language also presents the danger of tying the models to that language. The model may use f…

pythonUI自动化008::allure测试报告(安装及应用)

allure报告预览 1 下载jdk&#xff0c;配置jdk Path变量&#xff1a; https://www.cnblogs.com/FBGG/p/15103119.html&#xff08;这里不作阐述&#xff0c;请看该偏文章配置即可&#xff09; 2 下载allure驱动&#xff0c;配置allure Path变量&#xff1a; 下载allure驱动&a…

Springboot 开发之 Quartz 任务调度框架简介

引言 Quartz Scheduler是一个功能丰富的开源作业调度库&#xff0c;它允许开发人员以灵活的方式创建和管理定时任务。以下是对Quartz Scheduler的详细解析&#xff1a; 官网地址&#xff1a;https://www.quartz-scheduler.org/w3cschool 官方文档&#xff1a;https://www.w3c…

离子交换技术:助力电池材料纯度提升的环保解决方案

在新能源技术迅猛发展的今天&#xff0c;电池正极材料的生产和性能成为了科研与工业界的关注焦点。特别是锂离子电池&#xff0c;其广泛运用于电动汽车和各类便携式电子设备中&#xff0c;对电池性能的要求日益严苛。电池正极材料中的球形氢氧化镍直接影响着电池的充放电效率、…

PhotoShop - 初级抠图

1. 调整边缘 1.1 快速选择工具 使用快速选择工具&#xff0c;photoshop会智能的去识别图像中的边缘部分并以此选区 1.2 参数调整 使用快速选择工具选区之后&#xff0c;实际上很多边缘部分是识别不明确的&#xff0c;所以我们需要进一步调节参数使得选区中的边缘识别更加明…

区分恶意加密货币地址:基于西里尔字母伪装的安全隐患分析

引言 在当前的网络环境中&#xff0c;安全威胁变得越来越复杂&#xff0c;特别是在涉及加密货币交易时&#xff0c;攻击者常常利用各种手段来欺骗用户。最近&#xff0c;研究人员发现了一种利用西里尔字母&#xff08;Cyrillic alphabet&#xff09;伪装的恶意手法&#xff0c…

前端学习笔记-JS篇-03

循环for语句 for 是JavaScript提供的另一种循环控制的话句&#xff0c;它和 while只是语法上存在差异。 for循环基本使用 作用:重复执行代码 好处:把声明起始值、循环条件、变化值写到一起&#xff0c;让人一目了然&#xff0c;它是最常使用的循环形式 for(变量起始值;终止…

猫头虎 分享已解决Bug || TypeError: Cannot read property ‘map‘ of undefined 解决方案

&#x1f42f; 猫头虎 分享已解决Bug || TypeError: Cannot read property map of undefined 解决方案 摘要&#xff1a; 今天猫头虎带大家深入探讨在前端开发中常见的一个令人头疼的问题&#xff1a;TypeError: Cannot read property map of undefined。这个错误通常出现在我…

【Python机器学习】树回归——树回归与标准回归的比较

模型树、回归树和一般的回归方法&#xff0c;为了测试哪个模型最好&#xff0c;可以设计一些函数&#xff0c;它们可以在树构建好的情况下对给定的输入进行预测&#xff0c;之后利用那个这些函数来计算三种回归模型的测试误差。这些模型将在某个数据上进行测试&#xff0c;该数…

DC系列靶场---DC 9靶场的渗透测试

信息收集 地址探测 使用arp-scan 对目标主机做地址探测 arp-scan -l -I eth0 目标主机IP地址为172.30,1,134 端口扫描 使用nmap对目标主机做端口扫描 nmap -sS -sV -T4 -p- -O 172.30.1.134 目标主机开放了80端口&#xff0c;但是22端口是过滤。这个22端口应该是关闭的&a…

95% 向量资源节省,火山引擎云搜索 RAG 技术体系演进

采访嘉宾 | 火山引擎云搜索团队 鲁蕴铖、李杰辉、余炜强 编辑 | Tina InfoQ 2023 年&#xff0c;大模型惊艳了世界。2024 年&#xff0c;RAG 技术如日中天。 RAG 使得大模型能够在不更新模型参数的情况下&#xff0c;获得必要的上下文信息&#xff0c;从而减少大模型的幻觉。…

pytorch,用lenet5识别cifar10数据集(训练+测试+单张图片识别)

目录 LeNet-5 LeNet-5 结构 CIFAR-10 pytorch实现 lenet模型 训练模型 1.导入数据 2.训练模型 3.测试模型 测试单张图片 代码 运行结果 LeNet-5 LeNet-5 是由 Yann LeCun 等人在 1998 年提出的一种经典卷积神经网络&#xff08;CNN&#xff09;模型&#xff0c;主要…

dos命令获取java进程的pid并停止 bat脚本 第二篇

最近要做一个java程序一键重启的功能,主要思路是用批处理命令先将java程序停止,然后重新启动,研究了一把dos命令, taskkill /?取得帮助, taskkill /FI是筛选器: 然后很happy的写好停止脚本如下: taskkill /f /fi "IMAGENAME eq javaw.exe"是不是这样就行了…

spring中使用到的设计模式有哪些

Spring 框架是一个高度模块化和灵活的框架&#xff0c;广泛使用了各种设计模式来实现其核心功能和架构。这些设计模式帮助 Spring 提供了高可配置性、可扩展性和可维护性。以下是 Spring 框架中使用到的一些关键设计模式&#xff1a;