面试~双亲委派模型

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 面试~双亲委派模型


一、类加载

涉及到类加载器(需要准备相关的类加载知识)

1、什么是类加载?类加载的过程?

类加载:是指虚拟机把描述类的数据加载到内存里面,并对数据进行校验、解析和初始化,最终变成可以被虚拟机直接使用的class对象;


接着谈类加载过程前,先介绍一下类的生命周期。


类的生命周期包括了加载、验证、准备、解析、初始化、使用和卸载7个阶段。

其中准备、验证、解析3 个部分统称为连接(Linking)。

java为了支持动态绑定,解析和初始化的顺序是不固定的,其他的生命阶段顺序是固定的。


类加载过程 包括:

加载,加载分为三步:

1、通过类的全限定性类名获取该类的二进制流;

2、将该二进制流的静态存储结构转为方法区的运行时数据结构;

3、在堆中为该类生成一个class对象;

验证:验证该class文件中的字节流信息符合虚拟机的要求,不会威胁到jvm的安全

准备:为class对象的静态变量分配内存,初始化其初始值

解析:该阶段主要完成符号引用转化成直接引用

初始化:到了初始化阶段,才开始执行类中定义的java代码;初始化阶段是调用类构造器的过程


2、什么是类加载器,常见的类加载器有哪些?

类加载器: 通过一个类的全限定性类名获取该类的二进制字节流叫做类加载器.

类加载器,分为以下四种:

启动类(根)加载器(BootStrapClassLoader):用来加载java核心类库,无法被java程序直接引用;

扩展类加载器(Extension ClassLoader):用来加载java的扩展库,虚拟机实现会提供一个扩展库目录,该类加载器在扩展库目录里面查找并加载java类;

应用程序(系统类)加载器(AppClassLoader):它根据java的类路径来加载类,一般来说,java应用的类都是 通过它来加载的;

自定义类加载器:由java语言实现,继承自ClassLoader;



一、双亲委派模型

1、什么是双亲委派模型?为什么需要双亲委派模型?

什么是双亲委派模型?

当一个类加载器收到一个类加载的请求;

他首先不会尝试自己去加载,而是将这个请求委派给父类加载器去加载,一直向上委托(BootStrap--ext--app),直到委托到启动类加载

启动类检查是否能够加载这个类,不能就递归到扩展类加载器,还是不能加载这个类,继续递归到应用程序类加载器,这个时候,依然不能加载,就会抛出异常。即只有父类加载器在自己的搜索范围类查找不到给类时,子加载器才会尝试自己去加载该类;


为什么需要双亲委派模型?

为了防止内存中出现多个相同的字节码;因为如果没有双亲委派的话,那么就无法保证类的唯一性。比如用户自己也自己定义了一个 java.lang.String类,会和jdk的String 相同而发生冲突。


补充:那怎么打破双亲委派模型?

自定义类加载器,继承ClassLoader类,重写loadClass方法和findClass方法。


2、列举一些你知道的打破双亲委派机制的例子,为什么要打破?

JDK 9,Extension ClassLoader (扩展类加载器)被 Platform ClassLoader (平台类加载器)取代,

平台类加载器 收到 类加载请求,在委派给父加载器加载前,要先判断该类是否能够归属到某一个系统模块中,如果可以找到这样的归属关系,就要优先委派给负责那个模块的加载器完成加载

打破的原因,是为了添加模块化的特性

目录
相关文章
|
5月前
|
存储 缓存 NoSQL
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
redis分布式锁、redisson、可重入、主从一致性、WatchDog、Redlock红锁、zookeeper;Redis集群、主从复制,全量同步、增量同步;哨兵,分片集群,Redis为什么这么快,I/O多路复用模型——用户空间和内核空间、阻塞IO、非阻塞IO、IO多路复用,Redis网络模型
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
|
1月前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
83 2
|
3月前
|
安全 Java 应用服务中间件
JVM常见面试题(三):类加载器,双亲委派模型,类装载的执行过程
什么是类加载器,类加载器有哪些;什么是双亲委派模型,JVM为什么采用双亲委派机制,打破双亲委派机制;类装载的执行过程
106 35
JVM常见面试题(三):类加载器,双亲委派模型,类装载的执行过程
|
1月前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
4月前
|
消息中间件 NoSQL 领域建模
这些年背过的面试题——领域模型落地篇
本文是技术人面试系列领域模型落地篇,也是面试题系列的完结篇,感谢大家对本系列文章的支持~面试中关于领域模型落地都需要了解哪些内容?一文带你详细了解,欢迎收藏!
|
4月前
|
机器学习/深度学习 算法 数据挖掘
|
5月前
|
消息中间件 编解码 网络协议
京东面试 rockmq是推消息还是拉消息?他的消息模型是啥?
RocketMQ采用拉模式结合长轮询模拟推效果,减少延迟并优化资源使用。在长轮询中,服务器在无消息时保持请求开放,待有新消息时立即响应,提升实时性。利用Netty的TCP连接和异步处理,RocketMQ构建高效通信协议,适应不同吞吐量和实时性需求场景,兼顾控制与实时响应。
53 0
京东面试 rockmq是推消息还是拉消息?他的消息模型是啥?
|
5月前
|
存储 算法 安全
Java面试题:给定一个可能产生内存泄漏的场景,如何诊断并解决?实现一个生产者-消费者模型,使用适当的同步机制与并发工具类,Java并发工具包与框架:性能与调优
Java面试题:给定一个可能产生内存泄漏的场景,如何诊断并解决?实现一个生产者-消费者模型,使用适当的同步机制与并发工具类,Java并发工具包与框架:性能与调优
40 0
|
7月前
|
消息中间件 监控 Java
滴滴面试:谈谈你对Netty线程模型的理解?
Netty 线程模型是指 Netty 框架为了提供高性能、高并发的网络通信,而设计的管理和利用线程的策略和机制。 **Netty 线程模型被称为 Reactor(响应式)模型/模式,它是基于 NIO 多路复用模型的一种升级,它的核心思想是将 IO 事件和业务处理进行分离,使用一个或多个线程来执行任务的一种机制。** ## 1.**Reactor三大组件** Reactor 包含以下三大组件: ![image.png](https://cdn.nlark.com/yuque/0/2024/png/92791/1717079218890-89000a00-48bc-4a1a-b87e-e1b6
72 2
|
7月前
|
微服务 中间件 Nacos
01.【微服务架构】服务注册与发现:AP和CP,你选哪个?-- 面试准备+基本模型
【5月更文挑战第2天】面试准备应涵盖公司所使用的注册中心类型及其优缺点,了解其集群规模、QPS和机器性能。准备故障排查及优化案例。若公司未采用微服务,可熟悉ZooKeeper、Nacos或etcd的基本特性以讨论注册中心概念。面试时,可将话题引导至服务注册与发现,如被问及特定中间件,阐述为何选择它并讨论优缺点。当涉及微服务高可用性时,可强调服务注册与发现的作用。基础模型部分,需解释服务上线和下线流程,提及注册数据和分组功能,并举例说明。最后,简述服务注册与发现的高可用挑战。
153 8