【04-JVM面试专题-什么是双亲委派机制(父类委托机制)?如何打破双亲委派机制?双亲委派机制的优缺点?什么是沙箱安全机制呢?】

news2024/11/28 22:47:36

什么是双亲委派机制?如何打破双亲委派机制?

在这里插入图片描述

JVM的双亲委派机制知道吗?怎么打破它呢?你看看自己掌握的怎么样呢?

什么是双亲委派机制?(父类委托机制)

  1. 检查某个类是否已经加载
    自底向上,从Custom ClassLoader到BootStrap ClassLoader逐层检查,只要某个Classloader已加载,
    就视为已加载此类,保证此类只所有ClassLoader加载一次。
  2. 加载的顺序
    自顶向下,也就是由上层来逐层尝试加载此类。父类加载,子类不加载。

面试的过程中你能把上面的说出来我觉得刚刚及格,如果你能将下面JVM的三种机制也告诉面试官,我觉得,你这个小伙子有前途!

补充扩展:JVM的三种类加载机制

  1. 全盘负责 :就是当一个类加载器负责加载某​ ​个Class​ ​时,该​ ​Class​ ​所依赖的和引用的其他​ ​Class​ ​也将由该类加载器负责载入,除非显示使用另外一个类加载器来载入
  2. 父类委托 :就是当一个类加载器负责加载某个Class时,先让父类加载器试图加载该​ ​Class​ ​,只有在父类加载器无法加载该类时才尝试从自己的类路径中加载该类
  3. 缓存机制 :保证所有加载过的​ ​Class​ ​都会被缓存,当程序需要使用某个​ ​Class​ ​对象时,类加载器先从缓存区中搜索该​ ​Class​ ​,只有当缓存区中不存在该​ ​Class对象​ ​时,系统才会读取该类对应的二进制数据,并将其转换成​ ​Class对象​ ​,存储到缓存区

如何打破双亲委派机制?

  1. 通过自定义类加载器,继承classloader,重写loadclass方法;
  2. 通过SPI机制,使用ServiceLoader.load去加载,SPI Service Provider Interface 服务提供接口 意味着他的拓展性很强;

打破双亲委派机制的案例?

打破双亲委派机制的场景有很多:JDBC、JNDI、Tomcat等等,这块展开来说就比较多了,刚兴趣的同学可以先自行学习,后续我们会专门讲一讲这个怎么Tomcat打破双亲委派的典型案例。

什么是SPI机制呢?

SPI机制是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。这一机制为很多框架扩展提供了可能,比如在SpringBoot中就使用到了SPI机制。

沙箱机制

我们创建一个自定义string类,但是在加载自定义String类的时候会率先使用引导类加载器加载,而引导类加载器在加载的过程中会先加载jdk自带的文件(rt.jar包中java\lang\String.class),报错信息说没有main方法,就是因为加载的是rt.jar包中的string类。这样可以保证对java核心源代码的保护,这就是沙箱安全机制。

双亲委派机制的优势

  1. 双亲机制可以避免类的重复加载
  2. 沙箱机制保护程序安全,防止核心API被随意篡改
    自定义类:java.lang.String(报错:阻止创建 java.lang开头的类)

双亲委派机制的缺点

  1. 优势很突出,问题也比较明显,检查类是否加载的委托过程是单向的,这个方式虽然从结构上说比较清晰,使各个ClassLoader的职责非常明确,但是同时会带来一个问题,即顶层的ClassLoader无法访问底层的ClassLoader所加载的类。

结论:

  1. 由于Java虚拟机规范并没有明确要求类加载器的加载机制一定要使用双亲委派机制,只是建议而已。
  2. 比如在Tomcat中,类加载器所采用的加载机制就和传统双亲委派模型有一定区别,当缺省的类加载器接收到一个类的加载任务时,首先会由它自行加载,当它加载失败时,首先会由它自行加载,当它加载失败时,才会将类的加载任务委派给它的超类加载器去执行,这同时也是Servlet规范推荐的一种做法。

总结:

在这里插入图片描述

JVM知识在面试过程中非常高频,大家一定要牢牢掌握,如果以上文章有帮助到你,希望可以点个关注,留下属于你的足迹,比心!我们下节再见哦。

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

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

相关文章

将数组中的每个元素四舍五入到指定的精度numpy.rint()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 将数组中的每个元素 四舍五入到指定的精度 numpy.rint() 选择题 请问np.rint(a)的输出结果是? import numpy as np anp.array([-1.72,-1.3,0.37,2.4]) print("【显示】a:\n…

requests库基本用法

目录 1 GET请求 1.1 无参数 1.2 查询字符串 2 POST 2.1 无参数 2.2 json数据 2.3 文件 3 一些常见的请求 3.1 base64 requests是请求用的,在发起请求中requests会默认帮我们解决一些问题,比如跨域 下面做几个例子,服务选用…

CTFer成长之路之SSRF漏洞

SSRF漏洞CTF SSRF Training 题目描述: web容器中存在一个flag,mysql中存在一个管理员账号密码,其余容器中均没有特定flag mysql容器中内置 tcpdump vulnweb容器中内置一个 fpm.py 攻击脚本 docker-compose.yml version: "3" services:w…

有色金属行业数字化之路探析

有色金属行业是我国国民经济的支柱产业和重要组成部分,是处于整个原材料生产链的上游环节,其支撑着冶炼、钢铁、智能制造业、芯片、建筑等行业的发展,也是是科学研究、国防建设等方面发展的重要材料基础,同时还是保障国家综合实力…

Linux之安装node

Linux之安装node步骤如下 1.去网站下载node 下载地址: https://npm.taobao.org/mirrors/ 2.上传到指定目录下 3.解压 tar -zxvf node-v17.3.0-linux-x644.配置node环境变量 //执行以下命令 vim /etc/profile //在path中加入以下内容 /usr/local/node-v15.14.0/b…

电力电子系统仿真软件--Psim仿真软件设计

目录 1.简介 2.应用优势 3.应用领域 4.电路结构 5.界面介绍 6.应用实例 6.1 主电路部分 6.2 控制电路部分 6.3 具体的电路原理及仿真搭建过程后续会一一介绍,请各位点赞关注,你的关注将是博主最大的更新动力。 7.电力系统仿真软件下载链接 1.简…

以萨技术在科创板IPO终止:计划募资15亿元,实控人为李凡平

2月21日,上海证券交易所披露的信息显示,因以萨技术股份有限公司(下称“以萨技术”)及其保荐人撤回发行上市申请,根据《上海证券交易所股票发行上市审核规则》第六十三条的相关规定,上海证券交易所终止其发行…

创业能否成功?这几个因素很重要!

创业能否成功?这几个因素很重要! 2023-02-22 19:06:53 大家好,我是你们熟悉而又陌生的好朋友梦龙,一个创业期的年轻人 上周末跟朋友一起钓鱼,他跟吐槽现在生意越来越难做。他是我身边可以说是创业很成功的例子&#…

拨开迷雾 看见vivo穿越周期的秘密

文|智能相对论作者|佘凯文任何一个行业都有周期性,就好像我们在做股票投资的时候,提到最多的就是周期规律,因为只有掌握规律才可以让我们赚到钱。所以不论是哪家公司都逃脱不了行业周期的宿命。行业寒冬方显强者本色就拿手机行业来说吧&#…

初探 qiling ( 麒麟 ):开源的二进制分析、高级代码模拟框架

官方介绍: 官网:https://qiling.io/:https://twitter.com/qiling_iogithub 地址:https://github.com/qilingframework/qiling 1、qiling 简介 qiling 是什么 qiling 基于 python 开发,是一个开源的、可模拟多种架构…

Vue3 基础

Vue3 基础 概述 Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面&…

升职加薪必备,2023年程序员不能不知道的AI辅助编码工具

已经有很多人把chatGPT当做必备的Bug修复工具了,对于用AI写代码,有人感到失落,害怕被取代,而另一些人则认为人工智能将加快编写更好代码的过程。 尽管 AI 编写的代码并非完美无缺,但我相信,最终AI将取代人…

Java实例——网络实例

1、主机IP地址获取 步骤一:获取主机InetAddress 步骤二:获取主机IP地址 InetAddress address null;try {address InetAddress.getByName("www.baidu.com");}catch (UnknownHostException e) {System.exit(2);}System.out.println("Host…

聚类(性能度量)

文章目录聚类(性能度量)外部指标例1内部指标例2聚类(性能度量) 对数据集 D{x1,x2,...,xm}D\{x_1,x_2,...,x_m\}D{x1​,x2​,...,xm​} ,假定通过聚类给出的簇划分为 C{C1,C2,...,Ck}C\{C_1,C_2,...,C_k\}C{C1​,C2​,…

计算机组成原理错题

静态RAM(SRAM)和动态RAM(DRAM)的基本电路图不同,因此可以通过观察存储器的基本电路图来判断它属于哪一类。 静态RAM的基本电路图包括一个存储单元和一个数据选择器。每个存储单元由一个触发器(flip-flop&a…

汽车零部件企业数字工厂管理系统建设方案

在汽车零部件制造领域,伴随工业信息化与机器人化,制造模式逐渐从 CAD/CAE/CAM 数字化设计及加工走向全产品周期虚拟现实的数字化工厂管理系统平台,实现虚拟现实设计制造,防范产品缺陷并预防设备故障,大幅提高生产效率。…

做出选择,直面挑战,揭开数据中心网络的发展真相

为什么?你们发现没有?不知道,从什么时候开始,这个世界,变得越来越快了。快得仿佛昨天刚刚来到这个世界,一眨眼就日暮西山了。是的,时间过得好快,回想起2002年7月电气和电子工程师协会…

炼石:八年饮冰难凉热血,初心如磐百炼成钢

炼石成立八周年 八载笃行,踔厉奋发。创立于2015年的炼石,今天迎来了八岁生日,全体员工共同举行了温暖又充满仪式感的周年庆典。过去的2022,是三年疫情的艰难“收官之年”,新的2023,将是数据安全行业成为独…

FFT的物理意义

FFT结果的物理意义 FFT是离散傅立叶变换的快速算法,可以将一个信号变换到频域。有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。这 就是很多信号分析采用FFT变换的原因。另外,FFT可以将一…

内网渗透(四十九)之域控安全和跨域攻击-多种方式离线读取ntds.dit文件中的hash值

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…