成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試必問:什么是雙親委派模型?

開發(fā) 前端
雙親委派模型是和 Java 中多個類加載器(啟動類加載器、擴(kuò)展加載器、應(yīng)用程序類加載器)的運(yùn)行規(guī)則,通過這個(雙親委派模型)規(guī)則可以避免類的非安全問題和類被重復(fù)加載的問題,但它也遇到了一些問題,比如 JNDI 和 JDBC 不能通過這個規(guī)則進(jìn)行加載,它需要通過打破雙親委派的模型的方式來加載。

雙親委派模型是 Java 類加載器的一種工作模式,通過這種工作模式,Java 虛擬機(jī)將類文件加載到內(nèi)存中,這樣就保證了 Java 程序能夠正常的運(yùn)行起來。那么雙親委派模型究竟說的是啥呢?接下來我們一起來看。

1.類加載器

雙親委派模型針對的是 Java 虛擬機(jī)中三個類加載器的,這三個類加載器分別是:

  1. 啟動類加載器(Bootstrap ClassLoader)
  2. 擴(kuò)展類加載器(Extension ClassLoader)
  3. 應(yīng)用程序類加載器(Application ClassLoader)

如下圖所示:

圖片

這 3 個類加載器的作用如下。

1.1 啟動類加載器

啟動類加載器(Bootstrap ClassLoader)是由 C++ 實(shí)現(xiàn)的,它是用來加載 <JAVA_HOME>\jre\lib\rt.jar 和 resources.jar 等 jar 包的,如下圖所示:

圖片

接下來我們寫個代碼測試一下 rt 類加載器的打?。?/p>

public class ClassLoaderExample {
public static void main(String[] args) {
// rt 類下的 ClassLoader 打印
System.out.println("rt classloader:" + String.class.getClassLoader());
}
}

以上程序的執(zhí)行結(jié)果如下圖所示:

圖片

問題來了,為什么打印的不是“Bootstrap ClassLoader”而是 null 呢?這是因?yàn)閱宇惣虞d器(Bootstrap ClassLoader)是由 C++ 實(shí)現(xiàn)的,而這個 C++ 實(shí)現(xiàn)的類加載器在 Java 中是沒有與之對應(yīng)的類的,所以拿到的結(jié)果是 null。

1.2 擴(kuò)展類加載器

擴(kuò)展類加載器是用來加載 <JAVA_HOME>\jre\lib\ext 目錄下 jar 包的,如下圖所示:

圖片

接下來我們使用代碼來演示一下 ext 類加載器,示例代碼如下:

public class ClassLoaderExample {
public static void main(String[] args) {
// ext 類下 classloader 打印
System.out.println("ext classloader:" +
sun.net.spi.nameservice.dns.DNSNameService.class.getClassLoader());
}
}

以上程序的執(zhí)行結(jié)果如下圖所示:

圖片

1.3 應(yīng)用程序類加載器

應(yīng)用程序類加載器是用來加載 classpath 也就是用戶的所有類的,接下來我們寫代碼測試一下應(yīng)用程序類加載器的打印,實(shí)現(xiàn)代碼如下:

public class ClassLoaderExample {
public static void main(String[] args) {
System.out.println("application classloader:" +
ClassLoaderExample.class.getClassLoader());
}
}

以上程序的執(zhí)行結(jié)果如下圖所示:

圖片

2.雙親委派模型

雙親委派模型的執(zhí)行流程是這樣的:

1、當(dāng)加載一個類時(shí),會先從應(yīng)用程序類加載器的緩存里查找相應(yīng)的類,如果能找到就返回對象,如果找不到就執(zhí)行下面流程;

2、在擴(kuò)展加載器緩存中查找相應(yīng)的類,如果能找到就返回對象,如果找不到就繼續(xù)下面流程;

3、在啟動類加載器中查詢相應(yīng)的類,如果找到就返回對象,如果找不到就繼續(xù)下面流程;

4、在擴(kuò)展加載器中查找并加載類,如果能找到就返回對象,并將對象加入到緩存中,如果找不到就繼續(xù)下面流程;

5、在應(yīng)用程序類加載器中查找并加載類,如果能找到就返回對象,并將對象加入到緩存中,如果找不到就返回 ClassNotFound 異常。加載流程如下圖所示:

圖片

一般“雙親”指的是“父親”和“母親”,而在這里“雙親”指的是類加載類先向上找,再向下找的流程就叫做雙親委派模型。

3.優(yōu)缺點(diǎn)分析

3.1 優(yōu)點(diǎn)

雙親委派模型的優(yōu)點(diǎn)有兩個:1、安全。2、避免重復(fù)加載。

3.1.1 安全

在安全方面的表現(xiàn)時(shí),當(dāng)使用雙親委派模型時(shí),用戶就不能偽造一些不安全的系統(tǒng)類了,比如 jre 里面已經(jīng)提供了 String 類在啟動類加載時(shí)加載,那么用戶自定義再自定義一個不安全的 String 類時(shí),按照雙親委派模型就不會再加載用戶定義的那個不安全的 String 類了,這樣就可以避免非安全問題的發(fā)生了。

3.1.2 避免重復(fù)加載

使用雙親委派模型也可以避免一個類被重復(fù)加載,當(dāng)一個類被加載之后,因?yàn)槭褂玫碾p親委派模型,這樣不會出現(xiàn)多個類加載器都將同一個類重復(fù)加載的情況了。

3.2 缺點(diǎn)

雙親委派模型的典型問題是加載 SPI 實(shí)現(xiàn)類的場景,比如 JNDI(Java Naming and Directory Interface,Java 命名與目錄接口)服務(wù),它的代碼由啟動類加載器去加載(在 JDK 1.3 時(shí)放進(jìn) rt.jar),但 JNDI 的目的就是對資源進(jìn)行集中管理和查找,它需要調(diào)用獨(dú)立廠商實(shí)現(xiàn)部部署在應(yīng)用程序的 classpath 下的 JNDI 接口提供者(SPI, Service Provider Interface)的代碼,但啟動類加載器不可能“認(rèn)識”之些代碼,這就雙親委派模型的問題,JDBC 也是同樣的問題。

總結(jié)

雙親委派模型是和 Java 中多個類加載器(啟動類加載器、擴(kuò)展加載器、應(yīng)用程序類加載器)的運(yùn)行規(guī)則,通過這個(雙親委派模型)規(guī)則可以避免類的非安全問題和類被重復(fù)加載的問題,但它也遇到了一些問題,比如 JNDI 和 JDBC 不能通過這個規(guī)則進(jìn)行加載,它需要通過打破雙親委派的模型的方式來加載。

責(zé)任編輯:武曉燕 來源: Java面試真題解析
相關(guān)推薦

2023-12-06 12:11:43

類加載器雙親委派模型

2025-04-07 04:25:00

JDBCAPI加載器

2021-03-01 08:54:39

開發(fā)雙親委派

2023-08-04 08:53:42

2023-06-07 08:08:43

JVM內(nèi)存模型

2021-12-27 08:22:18

Kafka消費(fèi)模型

2023-02-15 07:03:41

跨域問題面試安全

2024-06-24 08:24:57

2023-02-17 08:02:45

@Autowired@Resource

2023-02-01 07:15:16

2021-01-06 09:51:19

類加載器雙親委派模型

2024-07-05 09:31:37

2020-09-29 15:24:07

面試數(shù)據(jù)結(jié)構(gòu)Hashmap

2020-07-28 08:59:22

JavahreadLocal面試

2021-12-09 12:22:28

MyBatis流程面試

2021-05-12 16:27:55

Java雙親模型

2021-12-06 11:03:57

JVM性能調(diào)優(yōu)

2025-07-01 07:41:37

Java類加載器雙親委派

2022-01-05 09:55:26

asynawait前端

2024-03-27 09:15:27

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩视频中文字幕 | 羞羞视频在线免费 | 日本一区二区视频 | 91视频中文| 国产做a爱免费视频 | 久久久成人精品 | 日韩有码一区 | 激情91| 欧美视频三区 | 欧美成人免费在线视频 | 性色av香蕉一区二区 | 日韩在线免费视频 | 亚洲国产精品自拍 | 日韩亚洲欧美综合 | 欧美中文字幕一区二区 | 亚洲欧美日韩精品久久亚洲区 | 香蕉91| 欧美日韩一区在线 | 男人天堂免费在线 | 国产成人精品久久二区二区 | 中文字幕一区在线 | 全免一级毛片 | 天天操 天天操 | 一区二区三区四区五区在线视频 | 久久久精品一区二区 | 国产精品视频久久 | 午夜精品久久久久久久久久久久久 | 亚洲一页 | 日韩在线资源 | 日韩视频在线免费观看 | av黄色在线观看 | 色吧综合| 国产日韩一区二区三区 | 一级片视频免费 | 精品久久久久一区 | 精品久久久久久亚洲综合网 | 久久久久黄色 | 91精品国产91久久久久久吃药 | 免费精品视频 | 亚洲看片| 成人中文字幕av |