JVM——类加载器(JDK8及之前,双亲委派机制)

news2024/11/24 6:02:12

目录

  • 1.类加载器的分类
    • 1.实现方式分类
      • 1.虚拟机底层实现
      • 2.JDK中默认提供或者自定义
    • 2.类加载器的分类-启动类加载器
    • 3.类加载器的分类-Java中的默认类加载器
    • 4.类加载器的分类-扩展类加载器
    • 5.类加载器的分类-类加载器的继承
  • 2.类加载器的双亲委派机制

类加载器(ClassLoader)是Java虚拟机提供给应用程序去实现获取类和接口字节码数据的技术。
类加载器只参与加载过程中的字节码获取并加载到内存这一部分。在这里插入图片描述

1.类加载器的分类

类加载器分为两类,一类是Java代码中实现的,一类是Java虚拟机底层源码实现的

1.实现方式分类

1.虚拟机底层实现

源代码位于Java虚拟机的源码中,实现语言与
虚拟机底层语言一致,比如Hotspot使用C++。
加载程序运行时的基础类
保证Java程序运行中基础类被正确地加载,
比如java.lang.String,确保其可靠性

2.JDK中默认提供或者自定义

JDK中默认提供了多种处理不同渠道的类加载器,
程序员也可以自己根据需求定制
继承自抽象类ClassLoader
所有Java中实现的类加载器都需要继承
ClassLoader这个抽象类

类加载器的设计JDK8和8之后的版本差别较大,JDK8及之前的版本中默认的类加载器有如下几种:在这里插入图片描述

2.类加载器的分类-启动类加载器

⚫ 启动类加载器(Bootstrap ClassLoader)是由Hotspot虚拟 机提供的、使用C++编写的类加载器。
⚫默认加载Java安装目录/jre/lib下的类文件,比如rt.jar, tools.jar,resources.jar等。
在这里插入图片描述

3.类加载器的分类-Java中的默认类加载器

⚫ ·扩展类加载器和应用程序类加载器都是JDK中提供的、使用Java编写的类加载器。
⚫ 它们的源码都位于sun.misc.Launcher中,是一个静态内部类。继承自URLClassLoader。具备通过目录
或者指定jar包将字节码文件加载到内存中。
在这里插入图片描述

4.类加载器的分类-扩展类加载器

⚫ 扩展类加载器(Extension Class Loader)是JDK中提供的、
使用Java编写的类加载器。
⚫ 默认加载Java安装目录/jre/lib/ext下的类文件。在这里插入图片描述

5.类加载器的分类-类加载器的继承

⚫ ·扩展类加载器和应用程序类加载器都是JDK中提供的、使用Java编写的类加载器。
⚫ 它们的源码都位于sun.misc.Launcher中,是一个静态内部类。继承自URLClassLoader。具备通过目录
或者指定jar包将字节码文件加载到内存中。在这里插入图片描述

2.类加载器的双亲委派机制

每个Java实现的类加载器中保存了一个成员变量叫“父”(Parent)类加载器,可以理解为它的上级, 并不是继承关系。
⚫ 应用程序类加载器的parent父类加载器是扩展类加载器,而扩展类加载器的parent是空。
⚫ 启动类加载器使用C++编写,没有上级类加载器。
⚫ 在类加载的过程中,每个类加载器都会先检查是否已经加载了该类,如果已经加载则直接返回,否则会将加载请求委派给父类加载器。
⚫ 如果类加载的parent为null,则会提交给启动类加载器处理。
在这里插入图片描述
⚫ 如果所有的父类加载器都无法加载该类,则由当前类加载器自己尝试加载。所以看上去是自顶向下尝试
加载。
在这里插入图片描述
⚫ 第二次再去加载相同的类,仍然会向上进行委派,如果某个类加载器加载过就会直接返回在这里插入图片描述

双亲委派机制指的是:自底向上查找是否加载过,再由顶向下进行加载。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Vue3.3 + Vite4.3 + TypeScript5+ Element-Plus:从零到一构建企业级后台管理系统(前后端开源)

vue3-element-admin 是基于 vue-element-admin 升级的 Vue3 Element Plus 版本的后台管理前端解决方案,技术栈为 Vue3 Vite4 TypeScript Element Plus Pinia Vue Router 等当前主流框架。 相较于其他管理前端框架,vue3-element-admin 的优势在于一…

笔记本配USB拓展坞网卡经常时不时掉线

ThinkPad X1 Carbon大概是2015年的老笔记本,自己买的USB3.0拓展坞(带网卡)的,我的笔记本不带网卡, 使用网线时不时右下角显网络掉线 , 就掉了,各种排查排除,不是线,路由器,拓展坞问题,最后更新拓展坞网卡芯片驱动,解决问题.下面是步骤: 搜索关键字:Realtek USB GbE Family Cont…

OpenCV必知必会基础3(包括色彩空间的变换、ROI、OpenCV中最重要的结构体Mat以及获取图像的属性)

文章目录 OpenCV的色彩空间——RGB与BGROpenCV的色彩空间——HSV与HSLHSV主要用于OpenCV中HSL OpenCV色彩空间转换YUV主要用于视频中题目 图像操作的基石Numpy【基础操作】np.arraynp.zerosnp.onesnp.fullnp.identitynp.eye Numpy基本操作之矩阵的检索与赋值Numpy基本操作三——…

c# - - - Application.StartupPath(程序安装目录)和Environment.CurrentDirectory(程序工作目录)

Application.StartupPath 应用程序的安装目录,不会改变。 在C:\Users\Administrator\source\repos\ConsoleApp6\bin\Debug目录中,运行ConsoleApp6.exe。 安装目录为:C:\Users\Administrator\source\repos\ConsoleApp6\bin\Debug 在C:\Users…

Git相关: 拉取、git push提交 过程遇到的错误

目录 解决git push报错error: RPC failed; HTTP 413 curl 22 关于这个问题,其实千万别用gitlab,因为你怎么推送 也不可能把几G的文件推上去。 error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 se 解决git push报错error: RPC failed;…

【外汇天眼】解析外汇交易平台:深度了解DD与NDD两大模式

外汇交易平台种类繁多,涵盖不同的分类与运营模式,令投资者难以甄别,也增加了选择的难度。为了解决这一问题,我们将更深入地了解外汇平台的多样性。 在线外汇交易平台主要分为两大类:处理平台模式(Dealing …

springcloud仓库管理系统源码

开发技术: jdk1.8,mysql5.7,idea,nodejs,vscode springcloud springboot mybatis vue elementui 功能介绍: 统计分析:查看产品,销售数量;统计近7日出入库统计 客户管…

RHCE8 资料整理(六)

RHCE8 资料整理 第 6 篇 软件管理第 23 章 用rpm管理软件23.1 rpm查询23.2 rpm卸载23.3 软件包升级23.4 rpm验证 第 24 章 用yum/dnf管理软件包24.1 yum架构介绍24.2 用光盘搭建yum源24.3 创建私有仓库24.4 yum客户端配置24.5 yum基本使用24.5.1 查询24.5.2 安装与卸载24.5.3 下…

ETL数据转换工具类型与适用场景

ETL数据转换工具在企业数据管理中扮演着重要的角色,能够帮助企业从多个数据源中提取、转换和加载数据,实现数据整合和分析。以下是针对Kettle、DataX和ETLCloud这几个工具的详细介绍及其适用场景。 Kettle(Pentaho Data Integration&#xf…

提高生存能力的7个关键技巧!

作为一款备受热议和玩家喜爱的多人在线射击游戏,《绝地求生》中生存能力的提高是取得胜利的关键。在这篇实用干货分享中,我们将详细说明7个关键技巧,帮助你在游戏中提高生存能力,获得更多胜利。 1.选择降落点:选择适合…

【Azure 架构师学习笔记】-Azure Storage Account(6)- File Layer

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Storage Account】系列。 接上文 【Azure 架构师学习笔记】-Azure Storage Account(5)- Data Lake layers 前言 上一文介绍了存储帐户的概述,还有container的一些配置,在…

【C++】深拷贝与浅拷贝

1、深拷贝与浅拷贝 当我们对复杂类型(结构体或者类)的对象进行初始化时,如果将同类型的对象A赋值给同类型的对象B,此时就涉及深拷贝和浅拷贝的问题。 浅拷贝:简单的赋值拷贝操作。把类/结构体的对象的属性原封不动的赋值给另一个同类型的对…

数据库进阶教学——索引

目录 一、索引概述 1、介绍 2、演示 3、优缺点 二、索引结构 1、B树 2、Hash 三、索引分类 四、索引语法 1、语法 2、示例 五、SQL性能分析 1、SQL执行频率 2、慢查询日志 3、profile详情 4、explain执行计划 六、索引使用 七、索引设计原则 一、索引概述 …

【android】install android NDK

目录 1 下载NDK 2 解压 3 android-ndk的配置 1 下载NDK 下载网址:NDK 下载 | Android NDK | Android Developers 如果没有所需要的版本,则点击页面下面 不受支持的 NDK 下载需要的版本。 2 解压 将压缩文件(例如 android-ndk-r25c-…

Hoppscotch:开源 API 开发工具,快捷实用 | 开源日报 No.77

hoppscotch/hoppscotch Stars: 56.1k License: MIT Hoppscotch 是一个开源的 API 开发生态系统,主要功能包括发送请求和获取实时响应。该项目具有以下核心优势: 轻量级:采用简约的 UI 设计。快速:实时发送请求并获得响应。支持多…

【机器学习基础】多元线性回归(适合初学者的保姆级文章)

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习 欢迎订阅!后面的内容会越来越有意思~ 💡往期推荐: 【机器学习基础】机器学习入门(1) 【机器学习基…

知虾数据分析软件:了解知虾数据分析软件提升Shopee店铺运营效果

在如今电商竞争激烈的市场中,了解市场趋势和产品数据是成功经营一家Shopee店铺的重要因素之一。而知虾——Shopee生意参谋作为一款功能强大的数据分析软件,可以帮助店主深入了解行业概况、产品潜力以及市场趋势,从而制定最优的运营策略。本文…

大型语言模型与知识图谱融合方法概述

背景意义 大型语言模型(LLM)已经很强了,但还可以更强。通过结合知识图谱,LLM 有望解决缺乏事实知识、幻觉和可解释性等诸多问题;而反过来 LLM 也能助益知识图谱,让其具备强大的文本和语言理解能力。而如果…

一加手机全球摄影展深圳开展 历年获奖作品齐登场

11 月 18 日至 12 月 3 日,一加手机将携手国际摄影奖(International Photography Awards,以下简称IPA),在深圳市南山区海岸城购物中心举办一加手机全球摄影展(OnePlus Global Photography Exhibition&#…

【Vue】内置指令真的很常用!

内置指令 v-text v-text用于将一个变量的值渲染为元素的文本内容 注意v-text只能接受字符串类型的值,对于对象类型,会调用toString()方法 与插值表达式区别就是它会替换标签中的值&#xff0c;只显示它绑定的&#xff08;还是插值语法用的多~&#xff09; 语法 <元素 …