JVM面试专题-双亲委派机制(父类委托机制)

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

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

image.png

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规范推荐的一种做法。
相关文章
|
2月前
|
安全 前端开发 Java
【JVM的秘密揭秘】深入理解类加载器与双亲委派机制的奥秘!
【8月更文挑战第25天】在Java技术栈中,深入理解JVM类加载机制及其双亲委派模型是至关重要的。JVM类加载器作为运行时系统的关键组件,负责将字节码文件加载至内存并转换为可执行的数据结构。其采用层级结构,包括引导、扩展、应用及用户自定义类加载器,通过双亲委派机制协同工作,确保Java核心库的安全性与稳定性。本文通过解析类加载器的分类、双亲委派机制原理及示例代码,帮助读者全面掌握这一核心概念,为开发更安全高效的Java应用程序奠定基础。
85 0
|
6天前
|
存储 监控 算法
美团面试:说说 G1垃圾回收 底层原理?说说你 JVM 调优的过程 ?
尼恩提示: G1垃圾回收 原理非常重要, 是面试的重点, 大家一定要好好掌握
美团面试:说说 G1垃圾回收 底层原理?说说你 JVM 调优的过程  ?
|
1月前
|
安全 Java 应用服务中间件
JVM常见面试题(三):类加载器,双亲委派模型,类装载的执行过程
什么是类加载器,类加载器有哪些;什么是双亲委派模型,JVM为什么采用双亲委派机制,打破双亲委派机制;类装载的执行过程
JVM常见面试题(三):类加载器,双亲委派模型,类装载的执行过程
|
23小时前
|
消息中间件 存储 Java
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
9 1
|
3天前
|
监控 架构师 Java
从蚂蚁金服面试题窥探STW机制
在Java虚拟机(JVM)中,垃圾回收(GC)是一个至关重要的机制,它负责自动管理内存的分配和释放。然而,垃圾回收过程并非没有代价,其中最为显著的一个影响就是STW(Stop-The-World)机制。STW机制是指在垃圾回收过程中,JVM会暂停所有应用线程的执行,以确保垃圾回收器能够正确地遍历和回收对象。这一机制虽然保证了垃圾回收的安全性和准确性,但也可能对应用程序的性能产生显著影响。
11 2
|
8天前
|
Java 应用服务中间件 程序员
JVM知识体系学习八:OOM的案例(承接上篇博文,可以作为面试中的案例)
这篇文章通过多个案例深入探讨了Java虚拟机(JVM)中的内存溢出问题,涵盖了堆内存、方法区、直接内存和栈内存溢出的原因、诊断方法和解决方案,并讨论了不同JDK版本垃圾回收器的变化。
17 4
|
5天前
|
架构师 Java 开发者
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
在40岁老架构师尼恩的读者交流群中,近期多位读者成功获得了知名互联网企业的面试机会,如得物、阿里、滴滴等。然而,面对“Spring Boot自动装配机制”等核心面试题,部分读者因准备不足而未能顺利通过。为此,尼恩团队将系统化梳理和总结这一主题,帮助大家全面提升技术水平,让面试官“爱到不能自已”。
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
|
8天前
|
缓存 前端开发 Java
JVM知识体系学习二:ClassLoader 类加载器、类加载器层次、类过载过程之双亲委派机制、类加载范围、自定义类加载器、编译器、懒加载模式、打破双亲委派机制
这篇文章详细介绍了JVM中ClassLoader的工作原理,包括类加载器的层次结构、双亲委派机制、类加载过程、自定义类加载器的实现,以及如何打破双亲委派机制来实现热部署等功能。
19 3
|
11天前
|
Java API 对象存储
JVM进阶调优系列(2)字节面试:JVM内存区域怎么划分,分别有什么用?
本文详细解析了JVM类加载过程的关键步骤,包括加载验证、准备、解析和初始化等阶段,并介绍了元数据区、程序计数器、虚拟机栈、堆内存及本地方法栈的作用。通过本文,读者可以深入了解JVM的工作原理,理解类加载器的类型及其机制,并掌握类加载过程中各阶段的具体操作。
|
11天前
|
存储 缓存 JavaScript
JVM面试真题总结(一)
JVM面试真题总结(一)