JVM类加载器的分类以及双亲委派机制

目录

前言

1. 类加载器的分类:

1.1 启动类加载器(Bootstrap ClassLoader):

1.2 扩展类加载器(Extension ClassLoader):

1.3 应用程序类加载器(Application ClassLoader):

1.4 自定义类加载器:

2. 双亲委派机制:

我的其他博客


前言

Java虚拟机(JVM)的类加载器(ClassLoader)负责将类的字节码加载到内存中,并将其转换为运行时的类。类加载器在Java中有不同的分类,而双亲委派机制是一种类加载器之间的协作机制,用于保证类的唯一性和安全性。

 

1. 类加载器的分类:

1.1 启动类加载器(Bootstrap ClassLoader):

这是Java虚拟机的一部分,用于加载Java的核心类库,如java.lang包中的类。它是JVM的一部分,通常用本地代码来实现,不是Java类。

1.2 扩展类加载器(Extension ClassLoader):

负责加载Java的扩展类库,位于java.ext.dirs系统属性所指定的目录中。通常是<JAVA_HOME>/lib/ext目录。

1.3 应用程序类加载器(Application ClassLoader):

也被称为系统类加载器,负责加载应用程序classpath下的类。它是ClassLoader类的子类,通常由Java虚拟机的实例化进程实例化。

1.4 自定义类加载器:

开发者可以通过继承ClassLoader类来自定义类加载器,实现自己的加载逻辑。这样的类加载器被称为用户自定义类加载器。

2. 双亲委派机制:

双亲委派机制是一种层次化的类加载器结构,保证类的唯一性和安全性。当一个类加载器收到加载类的请求时,它首先会检查这个类是否已经被加载过,如果已经加载过,就直接返回该类的Class对象;如果未加载过,它会将请求委派给父类加载器去加载,一直向上委派,直到到达启动类加载器。

工作流程如下:

  1. 当一个类加载器收到加载类的请求时,先检查该类是否已经加载。
  2. 如果已加载,直接返回Class对象。
  3. 如果未加载,将加载请求委派给父类加载器。
  4. 父类加载器按照同样的方式继续检查,直到到达启动类加载器。
  5. 如果启动类加载器无法加载该类,子类加载器尝试自己加载类。
  6. 如果子类加载器加载成功,返回Class对象;如果失败,报ClassNotFoundException。

这种机制的好处是避免了重复加载,确保类的唯一性,同时也提高了安全性,防止恶意类的加载。

自定义类加载器时,通常需要重写findClass方法来实现自己的加载逻辑,同时可以选择是否破坏双亲委派机制。

我的其他博客

Git命令大全:从基础到高级应用-CSDN博客

简单介绍一些其他的树-CSDN博客

什么是tomcat?tomcat是干什么用的?-CSDN博客

TCP/IP 四层体系结构-CSDN博客

Redis新数据类型-Bitmaps-CSDN博客

腾讯-轻量应用服务器centos7中宝塔安装MySQL8.0出现内存不足-CSDN博客Synchronized 优化-CSDN博客腾讯-轻量应用服务器centos7中宝塔安装MySQL8.0出现内存不足-CSDN博客

【计算机网络】URL概念及组成-CSDN博客

【计算机网络】TCP socket编程-CSDN博客

枚举类的final修饰-CSDN博客

什么是RabbitMQ-CSDN博客

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

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

相关文章

Linux第一个小程序——进度条

Linux第一个小程序——进度条 1. 前言2. 缓冲区概念3. \r && \n4. 进度条实现4.1 初级进度条4.2 升级进度条 1. 前言 在我们写这个小程序之前&#xff0c;我们要用到我们学的三个知识点 gcc的使用vim的使用make/makefile的使用 除此之外还需要一些其他的知识点&…

uniapp微信小程序下载base64图片流或https图片

常规https的图片下载是这样的 const urlPath https://test/logo.png uni.downloadFile({url: urlPath,success(res){// 这时会产生一个临时路径&#xff0c;在应用本次启动期间可以正常使用。if (res.statusCode 200) {// 需要将图片保存到相册uni.saveImageToPhotosAlbum({…

学习Django从零开始之三

搭建虚拟python环境 搭建开发环境有多种方式&#xff0c;其中包括本地直接安装Python的可执行文件&#xff0c;使用virtualenv&#xff0c;以及使用Anaconda和Miniconda等工具。这些工具在创建Python虚拟环境方面各有特点。具体不同之处感兴趣的同学可以自行查阅相关资料。 简…

2-go-变量定义、类型、常量、函数

1 变量定义 2 类型 3 常量 4 函数 1 变量定义 package mainimport "fmt"//注释 单行注释/* 多行注释 */ func main() {// 变量定义// 1 完整定义 var关键字 变量名 变量类型 变量值//var age int 19 // 变量定义了必须使用&#xff0c;不使用就报错//fmt.Prin…

锚定价值(现代诗)

一 已知苹果价值5元&#xff0c;香蕉价值6元。 用它们产生杂交水果&#xff0c;称为香果。 请问香果价值为多少&#xff1f; A. 11 B. 5.5 C. 5 D. 6 E. 30 F. 1000000 二 已知金奖苹果价值12元&#xff0c;银奖苹果价值9元。 请问铜奖苹果价值为多少&#xff1f; A. 6…

【Java后端】Tomcat(学习笔记)

一、Web服务器 1、Web服务器概述 服务器&#xff1a;装服务器软件的计算机 服务器软件&#xff1a;接收用户请求&#xff0c;处理请求&#xff0c;做出响应 2、常见的服务器软件 webLogicwebSphereJBOSSTomcatJavaEE&#xff1a;Java语言企业版开发的13个规范 二、tomcat…

IP代理如何影响网站的速度?代理ip服务器有哪些作用?

目录 前言 一、如何影响速度 二、代理服务器的作用 1. 隐藏真实IP地址 2. 绕过访问限制 3. 分布式访问 4. 数据缓存和加速 总结 前言 IP代理是一种通过在用户和目标网站之间引入代理服务器来访问目标网站的方式。代理服务器充当中间人&#xff0c;将用户的请求转发给目…

flyway快速入门基础教程

flyway快速入门 一、flyway是什么&#xff1f;二、flyway使用目的1. 使用原因&#xff1a;2. 举个例子&#xff1a; 三、flyway工作原理四、flyway使用约定和命名规则1. 数据库版本文件整体约定2. 数据库版本文件夹管理约定3. 数据库版本文件命名约定4. 禁止项 五、flyway配置和…

Lua 模仿C++类

Lua类的声明与定义 在文件中"AInfoClass.lua"声明并定义一个Lua类。 local AInfoClass {}function AInfoClass.New(id)local tempTab {}tempTab.id idsetmetatable(tempTab, {__index AInfoClass})tempTab:InitClass()return tempTab endfunction AInfoClass:I…

功能测试转向自动化测试 。10 年 心路历程——愿测试人不再迷茫

十年测试心路历程&#xff1a; 由于历史原因&#xff0c;大部分测试人员&#xff0c;最开始接触都是纯功能界面测试&#xff0c;随着工作年限&#xff0c;会接触到一些常用测试工具&#xff0c;比如抓包&#xff0c;数据库&#xff0c;linux 等。 我大学学的计算机专业&#…

Python自动化测试如何自动生成测试用例?

汽车软件开发自动化测试攻略 随着软件开发在造车行业中占有越来越重要的地位&#xff0c;敏捷开发的思想在造车领域中也逐渐地被重视起来&#xff0c;随之而来的是整车厂对自动化测试需求越来越强烈。本文结合北汇在自动化测试方面的丰富经验&#xff0c;简单介绍一下实施自动…

List当中的stream流使用

Java中的Stream流是一种用于处理集合数据的抽象概念。它可以让我们以一种类似于SQL查询的方式对集合进行操作&#xff0c;例如过滤、映射、排序、聚合等。Stream流可以让我们以更简洁的方式实现集合的处理和转换&#xff0c;同时也提供了更高效的并行处理能力。 对于List集合&…

密码管理器:方便与安全并存的选择

日常生活中使用各种应用程序时&#xff0c;密码安全问题是我们难以避免的。如果您也像我一样&#xff0c;经常忘记密码或混淆密码&#xff0c;就需要一款优秀的密码管理工具来帮助您解决这一问题。今天&#xff0c;我就来介绍一下密码管理器的功能和优势&#xff0c;看看它是如…

一款基于分布式文件存储的数据库MongoDB的介绍及基本使用教程

MongoDB 是由C语言编写的&#xff0c;是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下&#xff0c;添加更多的节点&#xff0c;可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个文档&#xff0c;数据结…

【问题解决】Buildroot文件系统dropbear 上位机scp命令Permission denied, please try again.

前提&#xff1a; 上位机&#xff1a;Ubuntu虚拟机与开发板同局域网开发板&#xff1a;Buildroot文件系统&#xff0c;开启了dropbear&#xff0c;已经联网与虚拟机同局域网 liefyuanubuntu:~/tcp-test/tcp-c-client$ scp tcp_client root192.168.8.199:/opt root192.168.8.1…

ControlNet Adding Conditional Control to Text-to-Image Diffusion Models

ControlNet: Adding Conditional Control to Text-to-Image Diffusion Models TL; DR&#xff1a;ControlNet 使得我们能通过输入额外的条件图&#xff08;如 Canny 边缘、人体姿态、深度图等&#xff09;&#xff0c;对 SD 生成结果的空间位置有更准确的控制。它拷贝 SD 部分…

音频ncm格式转mp3格式

做个笔记&#xff0c;ncm格式转mp3格式 参考&#xff1a;传送门 import os import json import base64 import struct import logging import binascii from glob import glob from tqdm.auto import tqdm from textwrap import dedent from Crypto.Cipher import AES from mu…

【MySQL学习之基础篇】SQL

文章目录 1. SQL的通用语法2. SQL 分类3. 数据定义语言&#xff08;DDL&#xff09;3.1. 数据库操作3.2. 表操作3.2.1. 数据类型3.2.2. 表的创建和查询操作3.2.3. 应用案例3.2.3. 表的修改操作3.2.4. 表的删除操作 4. 数据操作语言(DML)4.1. 添加数据4.2. 修改数据4.3. 删除数据…

5A-Downloader,m3u8文件转mp4文件,音视频分离ts合并、转mp4

获取方式: 1.https://netcut.cn/p/552630d4eb763a65 2.https://github.com/JoeLeeto/5A-Downloader 3.https://play.google.com/store/apps/details?idcom.leet.downloader

微信小程序ec-canvas(echarts)显示地图【以甘肃省为例】

文章目录 一、效果图二、实现1、下载echarts插件2、定制图形&#xff0c;生成 echarts.min.js 文件3、小程序中使用&#xff08;1&#xff09;下载甘肃地图&#xff08;2&#xff09;使用 参考文档《微信小程序使用echarts显示全国地图》《如何在微信小程序开发中使用echarts以…