JVM—双亲委派

news/2024/11/8 0:40:10/

文章目录

  • 什么是双亲委派?
  • 为什么要有双亲委派原理?
  • 破坏双亲委派的例子

————————————————————————————————

什么是双亲委派?

​ 就是我们写的java源文件到最终运行,必须要经过编译和类加载这两个阶段。编译的过程就是把 .java 文件编译成 .class文件。

​ 而在类加载的过程中,如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父

类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到最顶层的启动类加载器中,只有当父

加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去完成加载。

为什么要有双亲委派原理?

​ 这样做的优点,我认为有这么几个:首先就是保证了安全性,因为这种层级关系实际代表的是一种优先级,也就是所有的类的加载,优先给启动类加载器,那么对于核心类库中的类,就没办法去破坏,比如自己写一个 java…lang.String,最终还是会交给启动类加载器,再加上每个类加载器的作用范围,那么自己写的 String 类就没办法覆盖java类库中的类。

​ 再就是可以避免重复加载导致程序混乱的问题,因为父加载器已经加载过了,那么子类就没必要去加载了

破坏双亲委派的例子

如何打破双亲委派机制:重写 loadclass 方法

jdbc破坏双亲委派

原生的JDBC中Driver驱动本身只是一个接口,并没有具体的实现,具体的实现是由不同数据库类型去实现的。例如,MySQL的mysql-connector-.jar中的Driver类具体实现的。 原生的JDBC中的类是放在rt.jar包的,是由启动类加载器进行类加载的,在JDBC中的Driver类中需要动态去加载不同数据库类型的Driver类,而mysql-connector-.jar中的Driver类是用户自己写的代码,那启动类加载器肯定是不能进行加载的,既然是自己编写的代码,那就需要由应用程序启动类去进行类加载。于是乎,这个时候就引入线程上下文件类加载器(Thread Context ClassLoader)。有了这个东西之后,程序就可以把原本需要由启动类加载器进行加载的类,由应用程序类加载器去进行加载了。

tomcat打破双亲委派机制

  • 一个 web 容器可能需要部署两个应用程序,不同的应用程序可能会依赖同一个第三方类库的不同版本,不能要求同一个类库在同一个服务器只有一份,因此要保证每个应用程序的类库都是独立的,保证相互隔离
  • 部署在同一个 web 容器中相同的类库相同的版本可以共享。否则,如果服务器有 5 个应用程序,那么要有 5 份相同的类库加载进虚拟机,这肯定不行的。
  • web 容器也有自己依赖的类库,不能和应用程序的类库混淆。基于安全考虑,应该让容器的类库和程序的类库隔离开来。
  • 实现热部署。web 容器要支持 jsp 的修改,jsp 文件最终也是要编译成 class 文件才能在虚拟机中运行,但程序运行后修改 jsp 常见的事情, web 容器需要支持 jsp 修改后不用重启。

http://www.ppmy.cn/news/2110.html

相关文章

Springboot企业资源管理信息系统kvonv计算机毕业设计-课程设计-期末作业-毕设程序代做

Springboot企业资源管理信息系统kvonv计算机毕业设计-课程设计-期末作业-毕设程序代做 【免费赠送源码】Springboot企业资源管理信息系统kvonv计算机毕业设计-课程设计-期末作业-毕设程序代做本源码技术栈: 项目架构:B/S架构 开发语言:Java…

TCP--三次握手和四次挥手

原文网址:TCP--三次握手和四次挥手_IT利刃出鞘的博客-CSDN博客 简介 本文介绍TCP的三次握手和四次挥手。即:TCP建立连接和断开连接的过程。 三次握手 流程图 主机 A为客户端,主机B为服务端。 第一次握手 A 发送同步报文段(SYN…

一篇文章让你搞懂各种压缩,gzip压缩,nginx的gzip压缩,Minification压缩

前言 同学们可能听过这些压缩,但是可能不是了解,这篇文章让你弄清他们 webpack的gzip压缩和nginx的gzip压缩有什么区别?怎样开启gzip压缩?Minfication压缩又是什么鬼?怎样使项目优化的更好?本篇文章讲的是…

TypeScript算法题实战——二叉搜索树篇

二叉搜索树,也叫二叉查找树、二叉排序树,是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值。 注意…

C++校园导游程序及通信线路设计

C校园导游程序及通信线路设计 一、设计内容: 设计校园平面图,所含景点不少于10个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。 (1) 显示校园平面图&#xff08…

RK3568平台开发系列讲解(音视频篇)如何把音视频流进行网络传输?

🚀返回专栏总目录 文章目录 一、什么是RTP二、RTP 协议详解三、RTCP 协议详解沉淀、分享、成长,让自己和他人都能有所收获!😄 📢如何将码流打包成一个个数据包发送到网络上,那么我们就需要来了解一下 RTP 和 RTCP 协议。 一、什么是RTP 为了保证传输的实时性,一般使…

自动驾驶:2022 apollo day 观后感(一)

2022 apollo day 观后感(一)注: ppt来自apollo day,结合ppt,讲述一些自己的想法,欢迎批评指正!Topic One -- 打造安全、智能、高效的自动驾驶技术体系(陈竞凯)无人驾驶技…

[附源码]Python计算机毕业设计SSM建筑工程管理系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…