首页 > 其他分享 >面试官:如何打破双亲委派机制?

面试官:如何打破双亲委派机制?

时间:2024-07-05 13:42:10浏览次数:12  
标签:委派 类库 面试官 java name ClassLoader 双亲 加载

面试连环call

  1. 双亲委派机制是什么?如何打破双亲委派机制?
  2. JVM都有哪些类加载器
  3. 如何构造一个自定义类加载器
  4. Tomcat的类加载机制?Spring的类加载机制
  5. Class.forName()和ClassLoader.loadClass()区别?

在开始讲述之前简单回顾一下之前的类加载过程

  • 类加载过程:加载->连接->初始化
  • 其中连接过程又分为:验证->准备->解析

具体内容大家可以看我上一篇关于类加载过程的详细介绍 Java类是如何被加载到内存中的?

类加载器作用

类加载器的主要作用就是加载 Java 类的字节码( .class 文件)到 JVM 中(在内存中生成一个代表该类的 Class 对象)。

字节码可以是 Java 源程序(.java文件)经过 javac 编译得来,也可以是通过工具动态生成或者通过网络下载得来。

image-20211030235925336

需要注意的是

  • 类加载器是一个负责加载类的对象,用于实现类加载过程中的加载这一步。

  • 每个 Java 类都有一个引用指向加载它的 ClassLoader

  • 数组类不是通过 ClassLoader 创建的(数组类没有对应的二进制字节流),是由 JVM 直接生成的。

Class.forName()和ClassLoader.loadClass()区别?

  • Class.forName(): 将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块
  • ClassLoader.loadClass(): 只是将.class文件加载到jvm中,不会执行static中的内容, 只有在newInstance才会去执行static中内容

类加载器分类

  1. 启动类加载器: Bootstrap ClassLoader,负责加载存放在JDK\jre\lib(JDK代表JDK的安装目录,下同)下,或被-Xbootclasspath参数指定的路径中的,并且能被虚拟机识别的类库(如rt.jar,所有的java.*开头的类均被Bootstrap ClassLoader加载)。启动类加载器是无法被Java程序直接引用的。

  2. 扩展类加载器: Extension ClassLoader,该加载器由sun.misc.Launcher$ExtClassLoader实现,它负责加载JDK\jre\lib\ext目录中,或者由java.ext.dirs系统变量指定的路径中的所有类库(如javax.*开头的类),开发者可以直接使用扩展类加载器。

  3. 应用程序类加载器: Application ClassLoader,该类加载器由sun.misc.Launcher$AppClassLoader来实现,它负责加载用户类路径(ClassPath)所指定的类,开发者可以直接使用该类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。

应用程序都是由这三种类加载器互相配合进行加载的,如果有必要,我们还可以加入自定义的类加载器。

双亲委派模型

标签:委派,类库,面试官,java,name,ClassLoader,双亲,加载
From: https://www.cnblogs.com/xieshijie/p/18285640

相关文章

  • 面试官:Java类是如何被加载到内存中的?
    面试连环callJava类是如何被加载到内存中的?Java类的生命周期都有哪些阶段?JVM加载的class文件都有哪些来源?JVM在加载class文件时,何时判断class文件的格式是否符合要求?类生命周期一个类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期将会经历加载、验证、准备、......
  • 面试官:JVM调优,主要针对是哪一个区域?JVM内存结构是怎样的?
    作为一个Java程序员,在日常的开发中,不必像C/C++程序员那样,为每一个内存的分配而操心,JVM会替我们进行自动的内存分配和回收,方便我们开发。但是一旦发生内存泄漏或者内存溢出,如果对Java内存结构不清楚,那将会是一件非常麻烦的事情!本文笔者将为大家详解Java内存结构。面试tips聊聊......
  • 面试官:你了解git cherry-pick吗?
    事情要从一次不规范的代码开发开始说起背景故事时间2024年某个风平浪静的周五晚上地点中国,北京,西二旗,某互联网大厂会议室人物小杰,小A,小B,老K对话老K:昨天提交的代码被测试打回来了!为什么小B没开发完的内容也一起提交上去了?小B:啊?我不清楚啊,我在开发分支B开发完一部......
  • 大厂面试官问我:在同步binlog的时候主库是一个时间,从库是一个时间,底层是怎么解决的?【后
    本文为【Mysql日志八股文合集(2)】初版,后续还会进行优化更新,欢迎大家关注交流~大家第一眼看到这个标题,不知道心中是否有答案了?在面试当中,面试官经常对项目亮点进行深挖,来考察你对这个项目亮点的理解以及思考!这个时候,你如果可以回答出面试官的问题,甚至是主动说出自己的思考,那在......
  • 秒懂双亲委派机制
    前言最近知识星球中,有位小伙伴问了我一个问题:JDBC为什么会破坏双亲委派机制?这个问题挺有代表性的。双亲委派机制是Java中非常重要的类加载机制,它保证了类加载的完整性和安全性,避免了类的重复加载。这篇文章就跟大家一起聊聊,Java中类加载的双亲委派机制到底是怎么回事,有哪些破......
  • 面试官:告诉我为什么static和transient关键字修饰的变量不能被序列化?
    一、写在开头在上一篇学习序列化的文章中我们提出了这样的一个问题:“如果在我的对象中,有些变量并不想被序列化应该怎么办呢?”当时给的回答是:不想被序列化的变量我们可以使用transient或static关键字修饰;transient关键字的作用是阻止实例中那些用此关键字修饰的的变量序列化;当......
  • 大厂面试官问我:布隆过滤器有不能扩容和删除的缺陷,目前有没有能够利用到的数据结构来做
    往期内容:面试官问我:Redis处理点赞,如果瞬时涌入大量用户点赞(千万级),应当如何进行处理?【后端八股文(1)】-CSDN博客本文为【布隆过滤器八股文合集】初版,后续还会进行优化更新,欢迎大家评论交流~大家第一眼看到这个标题,不知道心中是否有答案了?在面试当中,面试官经常对项目亮点进行......
  • 面试官:请你实现三栏布局并且优先加载中间内容 我:稳啦- ̗̀(๑ᵔ⌔ᵔ๑)
    前言三栏布局是网页设计中一种经典布局方式,它将页面分为三个垂直部分:左栏、中栏和右栏,三栏在同一行显示。这种布局模式在很多网站的首页或内容密集型页面中非常常见,因为它能够有效地组织信息,提供良好的用户体验。常常也是作为面试常考题出现,今天将为大家介绍常见的三栏布......
  • JVM类加载器与双亲委派机制
    通过上一篇Java的类加载机制相信大家已经搞明白了整个类加载从触发时机,接着我们就来看下类加载器,因为类加载机制是有加载器实现的。 类加载器的分类启动类加载器BootstrapClassLoader是Java虚拟机(JVM)的一部分,它负责加载Java核心库,也就是JavaRuntimeEnvironment......
  • 做完这些大模型项目,面试官直呼太牛了
    前言大语言模型正迅速成为互联网时代最热门的技术创新之一,虽然现在该技术尚处于起步阶段,但已经开始在一些企业应用中广泛部署。接下来,我们来看看大语言模型的10大应用场景。一、文本翻译二、恶意软件分析三、创造文本内容四、搜索五、代码开发六、检测和预防网络攻......