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

news/2024/7/16 8:14:15 标签: jvm, pycharm, ide

目录

  • 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.niftyadmin.cn/n/5183800.html

相关文章

k8s之HPA

HPA(Horizontal Pod Autoscaling)Pod 水平自动伸缩,Kubernetes 有一个 HPA 的资源,HPA 可以根据 CPU 利用率自动伸缩一个 Replication Controller、Deployment 或者Replica Set 中的 Pod 数量。 (1)HPA 基于…

OpenCV入门2——图像视频的加载与展示一些API

文章目录 题目OpenCV创建显示窗口OpenCV加载显示图片题目 OpenCV保存文件利用OpenCV从摄像头采集视频从多媒体文件中读取视频帧将视频数据录制成多媒体文件OpenCV控制鼠标关于[np.uint8](https://stackoverflow.com/questions/68387192/what-is-np-uint8) OpenCV中的TrackBar控…

2023.11.14 hivesql的容器,数组与映射

目录 https://blog.csdn.net/m0_49956154/article/details/134365327?spm1001.2014.3001.5501https://blog.csdn.net/m0_49956154/article/details/134365327?spm1001.2014.3001.5501 8.hive的复杂类型 9.array类型: 又叫数组类型,存储同类型的单数据的集合 10.struct类型…

前端学习笔记--Event-loop

定义 Event Loop:即事件循环,是指浏览器或Node的一种解决javaScript单线程运行时不会阻塞的一种机制,也就是我们经常使用异步的原理。 **进程:**进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分…

基于JuiceFS 的低成本 Elasticsearch 云上备份存储

杭州火石创造是国内专注于产业大数据的数据智能服务商,为了解决数据存储及高效服务客户需求,选择了 Elasticsearch 搜索引擎进行云上存储。基于性能和成本的考虑,在阿里云选择用本地 SSD ECS 机型自建集群。但由于是自建集群,如何…

计算机基础知识53

模板之过滤器 # HTML被直接硬编码在 Python代码之中,Django的 模板系统(Template System) # 过滤器给我们提供的有六十多个,但是我们只需要掌握10个以内即可 过滤器名称就是函数名 # 语法:{{ obj|filter__name:param }} 变量名字…

M系列 Mac使用Homebrew下载配置git和连接GitHub

一、首先我们需要安装Homebrew M系列 Mac安装配置Homebrewhttps://blog.csdn.net/W_Fe5/article/details/134428377?spm1001.2014.3001.5501 二、下载git 1、终端输入一下命令 brew install git 2、这时下载完成 二、配置git 1、创建用户名和邮箱 这里以我自己的邮箱举例…

PG数据库实现merge into方法

语法格式1:有则更新,无则插入 insert into table_1(column_1,column_2, column_3) select column_1,column_2,column_3,from table_2on conflict (column_1)do update setcolumn_2 excluded.column_2,column_3 excluded.column_3如: inse…