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规范推荐的一种做法。
相关文章
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
76 2
|
1月前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
1月前
|
存储 算法 安全
JVM常见面试题(四):垃圾回收
堆区域划分,对象什么时候可以被垃圾器回收,如何定位垃圾——引用计数法、可达性分析算法,JVM垃圾回收算法——标记清除算法、标记整理算法、复制算法、分代回收算法;JVM垃圾回收器——串行、并行、CMS垃圾回收器、G1垃圾回收器;强引用、软引用、弱引用、虚引用
|
1月前
|
Arthas 监控 Java
JVM进阶调优系列(9)大厂面试官:内存溢出几种?能否现场演示一下?| 面试就那点事
本文介绍了JVM内存溢出(OOM)的四种类型:堆内存、栈内存、元数据区和直接内存溢出。每种类型通过示例代码演示了如何触发OOM,并分析了其原因。文章还提供了如何使用JVM命令工具(如jmap、jhat、GCeasy、Arthas等)分析和定位内存溢出问题的方法。最后,强调了合理设置JVM参数和及时回收内存的重要性。
|
2月前
|
存储 监控 算法
美团面试:说说 G1垃圾回收 底层原理?说说你 JVM 调优的过程 ?
尼恩提示: G1垃圾回收 原理非常重要, 是面试的重点, 大家一定要好好掌握
美团面试:说说 G1垃圾回收 底层原理?说说你 JVM 调优的过程  ?
|
3月前
|
安全 Java 应用服务中间件
JVM常见面试题(三):类加载器,双亲委派模型,类装载的执行过程
什么是类加载器,类加载器有哪些;什么是双亲委派模型,JVM为什么采用双亲委派机制,打破双亲委派机制;类装载的执行过程
106 35
JVM常见面试题(三):类加载器,双亲委派模型,类装载的执行过程
|
2月前
|
消息中间件 存储 Java
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
|
2月前
|
消息中间件 存储 Java
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
59 1
|
2月前
|
监控 架构师 Java
从蚂蚁金服面试题窥探STW机制
在Java虚拟机(JVM)中,垃圾回收(GC)是一个至关重要的机制,它负责自动管理内存的分配和释放。然而,垃圾回收过程并非没有代价,其中最为显著的一个影响就是STW(Stop-The-World)机制。STW机制是指在垃圾回收过程中,JVM会暂停所有应用线程的执行,以确保垃圾回收器能够正确地遍历和回收对象。这一机制虽然保证了垃圾回收的安全性和准确性,但也可能对应用程序的性能产生显著影响。
40 2
|
2月前
|
Java 应用服务中间件 程序员
JVM知识体系学习八:OOM的案例(承接上篇博文,可以作为面试中的案例)
这篇文章通过多个案例深入探讨了Java虚拟机(JVM)中的内存溢出问题,涵盖了堆内存、方法区、直接内存和栈内存溢出的原因、诊断方法和解决方案,并讨论了不同JDK版本垃圾回收器的变化。
41 4