JAVA基础 - CLASSLOADER双亲委派机制?

news2024/11/29 10:31:12

类的生命周期

在JAVA中数据类型分为基本数据类型和引用数据类型。基本数据类型,由虚拟机预先定义,引用数据类型则需要进行类加载。
JAVA将引用数据类型分为:类、接口、数组和泛型参数,而「泛型参数」在编译时期会被擦除, 因此JAVA虚拟机的类型实际上只有三种。「数组」是由JAVA虚拟机直接生成的;类、接口则有对应的「字节流」,这此不同形式的「字节流」都会被加载到JAVA虚拟机中。
按照JVM规范,从.CLASS文件到加载到内存中,到类的卸载出内存为止,它的整个生命周期包括7个阶段:
(1)“加载、验证、准备、初始化和卸载” 这五个阶段的顺序是确定的,“解析”可以在初始化之后再开始(运行时绑定或动态绑定或晚期绑定)。
(2)“验证、准备和解析”这三个阶段统称为连接(Linking)。
(2) 类加载过程分为:加载、验证、准备、解析和初始化五个阶段。
在这里插入图片描述

类加载过程

类加载过程分为:加载、验证、准备、解析和初始化五个阶段。这里的「加载」是指「类加载过程」的第一个阶段,在加载阶段,虚拟机需要完成以下 3 件事:
(1)通过一个类的全限定名来获取定义此类的二进制字节流, 使用的就是双亲委派机制
(2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构;
(3)在内存中生成一个代表这个类的 java.lang.Class 对象,作为方法区这个类的各种数据的访问入口。

类生命周期的其他阶段,不在该博文中介绍…

双亲委派机制是什么

类加载器查找CLASS所采用的是双亲委托模式,由向上委派和向下委派组成了双亲委派。
所谓双亲委托模式就是:首先判断该CLASS是否已经加载,如果没有被加载,不是自身去查找而是委托给父加载器进行查找,然后样依次进行递归,直到委托到最顶层的Bootstrap ClassLoader,如果Bootstrap ClassLoader找到了该CLASS,则直接返回,如果没找到,则继续依次向下查找,最后会交由自身去查找。

双亲委托机制的加载流程

(1)如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成。
(2)每一个层次的类加载器都是按照(1)进行递归,所以所有的加载请求最终都应该传送到顶层的启动类加载器中。
(3)只有当父加载器反馈自己无法完成这个加载请求时(搜索范围中没有找到所需的类),子加载器才会尝试自己去加载,如果子类也无法完成,则会依次往下传递,直到这个请求被成功加载,但是一直到自定义加载器都没有找到,JVM就会抛出ClassNotFund的异常。
在这里插入图片描述

一句话:先从下到上,再从上到下(或者说:向上委派,向下加载)

在这里插入图片描述

双亲委派机制的优点

简言之:保证类的唯一性和安全性

(1)避免类的重复加载
如果一个CLASS已经加载过了,就不会再次被加载,而是先从缓存中直接读取;
(2)保护程序安全
防止核心API被随意篡改。通过委托方式不会去篡改核心.CLASS,即使篡改也不会去加载,即使加载了也不再是同一个.CLASS对象了。不同的加载器加载同一个.CLASS也不是同一个CLASS对象。当自己程序中定义了一个和Java.lang包同名的类,因为使用的是双亲委派机制,会由启动类加载器去加载JAVA_HOME/lib中的类,而不是加载用户自定义的类。所以程序可以正常编译,但是自己定义的类无法被加载运行。

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

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

相关文章

web前端 --- javascript(01)-- 介绍、变量和数据类型

JavaScript w3c:三层分离 结构层:HTML 表示层:CSS 行为层:JavaScript 介绍 (1)作用: 数据校验网页特效数据交互服务器端编程(NodeJS) (2)javas…

开源赋能 普惠未来|UBSICE诚邀您参与2023开放原子全球开源峰会

UBSICE(Unified Basic Service Infrastructure Community Edition)是一个轻量级“面向领域”的高可用、高性能、业务连续性的微服务架构技术底座。UBSICE特有的“微服务容器”不仅是一个微服务的运行容器,还通过“容器控制器”管理其他微服务…

Linux超全整理Linux性能分析工具汇总

出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章。本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面。如果没有完善的计算机系统知识,网络知识和操作系统知识,文档中的工具…

大数据存储方式有哪些?

写在前面 本文隶属于专栏《大数据从 0 到 1》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和文献引用请见《大数据从 0 到 1》 正文 数据常用的存储介质为磁盘和磁带。…

Seaborn.load_dataset()加载数据集失败最佳解决方法

load_dataset() 是 Seaborn 库中提供的一个函数,用于加载一些原始数据集。这些数据集包含了许多经典的数据集,比如鸢尾花数据集、小费数据集等,这些数据集在数据可视化和机器学习中非常常见。 使用 load_dataset() 函数可以方便地获取这些数…

HBase:(二)基本操作

1.数据模型 术语解释Name Space命名空间,类似于关系型数据库的 database 概念,每个命名空间下有多个表。HBase 两个自带的命名空间,分别是 hbase 和 default,hbase 中存放的是 HBase 内置的表,default表是用户默认使用…

数据治理8大核心模块建设

数据治理是一个去中心化、多元参与的系统工程。一个全面且明确的数据治理体系,可以帮助组织构建生态式、协同化治理路径,最大化地提升整体数据质量,实现数据战略,激活新型生产力。 本文以元数据、主数据、数据标准、数据质量、数…

2023年「身份安全」行业白皮书、研究报告、案例合集速览!

随着企业将其业务向数字化、云和移动化转变,身份的数量、类型都呈爆炸式增长。这也带来了全新维度的威胁格局,如果保护不当,可能会为攻击者提供更多可利用的攻击路径。 虽然许多工具和技术旨在保障身份安全,但身份威胁检测和响应…

chatgpt赋能python:Python主窗口名字怎么修改?

Python主窗口名字怎么修改? Python是一种解释型的编程语言,广泛应用于Web开发、数据科学、人工智能等领域。在Python编写的GUI程序中,窗口名字是非常重要的一个元素,因为它可以直观地让用户知道当前的应用程序是什么。在这篇文章…

IP地址规划方法

一、IP地址规划的基本步骤: (1)判断用户对网络以及主机数的需求; (2)计算满足用户需要的基本网络地址结构; (3)计算地址掩码; (4)…

工程swift与OC混编改造

最近公司项目准备引入swift,由于目前工程已经完成了组件化不再是简单的单仓工程,所以需要进行混编改造。下面记录一下自己对工程进行混编改造的思考以及过程。 混编原理 看了很多文档,比较少有讲混编原理的,这里简单介绍一下语言…

第十九章_手写Redis分布式锁

锁的种类 单机版同一个JVM虚拟机内synchronized或者Lock接口。 分布式多个不同JVM虚拟机,单机的线程锁机制不再起作用,资源类在不同的服务器之间共享了。 一个靠谱分布式锁需要具备的条件和刚需 独占性 :OnlyOne,任何时刻只能有且…

linux-静态库制作与使用

创建2个目录进行创建与使用的演示 创建静态库 准备源文件与头文件 查看所有源文件与头文件 将源文件编译.o文件,然后将.o文件打包为静态库 gcc -c mymath.c -o mymath.o -stdc99 gcc -c myprint.c -o myprint.o -stdc99 ar指令:打包多个.o文件为静态…

Fast-RCNN理论基础

一:总体流程 1、将图像输入网络得到相应的特征图。 2、使用RPN结构生成候选框,将RPN生成的候选框投影到特征图上获得相应的特征矩阵。 3、将每个特征矩阵通过ROI pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预…

测试老鸟整理,从手工进阶自动化测试,自动化之路清晰通透...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Python自动化测试&…

主啊,我甚至不知道从何说起...

主啊,我甚至不知道从何说起...欢迎来到费米悖论。 外面有太多令人恐惧的事物。 我不会一一说过。然而,我读到的一件事情让我感到恐惧,我希望它也让你感到恐惧。 那么,就是这样... 这一切与一个问题有关:如果他们确实存在,为什么还没有来访?可怕的就是这些可能性。 根据《弄清外…

PCB布局思路分析 让你的布局从此简单!

分析好整个电路原理以后,就可以开始对整个电路进行布局布线,这一期,给大家介绍一下布局的思路和原则。1、首先,我们会对结构有要求的器件进行摆放,摆放的时候根据导入的结构,连接器得注意1脚的摆放位置。 ​…

财务共享中心搭建以后,如何进行精细化管理?

财务共享中心通过统一的财务流程、系统和人员配置实现了财务业务的标准化和规范化,为企业的财务管理提供了很大的便捷性和效率性,目前许多大型企业已纷纷开始搭建自己的财务共享中心。 但企业在搭建财务共享中心之后,往往会在运行初期遇上业…

Qt 帮助框架使用

前面我们已经简单了解了Qt帮助框架,本节我们将举例说明生成Qt帮助集,并自定义Qt Assistant。 准备工作 因为创建帮助系统建立帮助文件的前提是HTML文档文件已经存在,所以我们来弄一些简单的HTML文档(难的我还不会)。…

使用exe4j和Inno Setup把jar包转成exe

使用exe4j和Inno Setup把jar包转成exe exe4j下载地址:https://www.ej-technologies.com/download/exe4j/version_60 Inno Setup地址: 链接:https://pan.baidu.com/s/1Lh0JUuQgB6bkbACIx6MqdQ 提取码:dfox 一、exe4j将jar装车exe…