專(zhuān)欄導(dǎo)航
JVM工作原理與實(shí)戰(zhàn)
RabbitMQ入門(mén)指南
從零開(kāi)始了解大數(shù)據(jù)
目錄
專(zhuān)欄導(dǎo)航
前言
一、JDK8及之前的類(lèi)加載器
二、JDK9及之后的類(lèi)加載器
1.啟動(dòng)類(lèi)加載器
2.平臺(tái)類(lèi)加載器(擴(kuò)展類(lèi)加載器)
總結(jié)
前言
JVM作為Java程序的運(yùn)行環(huán)境,其負(fù)責(zé)解釋和執(zhí)行字節(jié)碼,管理內(nèi)存,確保安全,支持多線程和提供性能監(jiān)控工具,以及確保程序的跨平臺(tái)運(yùn)行。本文主要介紹了JDK8及之前的類(lèi)加載器、JDK9及之后的類(lèi)加載器等內(nèi)容。 ?
一、JDK8及之前的類(lèi)加載器
JDK8及之前的版本中,擴(kuò)展類(lèi)加載器和應(yīng)用程序類(lèi)加載器的源碼位于rt.jar包中的sun.misc.Launcher.java。默認(rèn)的類(lèi)加載器層次結(jié)構(gòu)如下:
- 啟動(dòng)類(lèi)加載器(Bootstrap):這是最頂層的類(lèi)加載器,負(fù)責(zé)加載Java的核心類(lèi)庫(kù),如java.lang包中的類(lèi)等。它是用C++編寫(xiě)的,是Java虛擬機(jī)底層實(shí)現(xiàn)的一部分。
- 擴(kuò)展類(lèi)加載器(Extension):這是Bootstrap的子類(lèi)加載器,負(fù)責(zé)加載Java的擴(kuò)展類(lèi)庫(kù)。它是ClassLoader的子類(lèi),通過(guò)調(diào)用父類(lèi)的loadClass()方法來(lái)加載類(lèi)。
- 應(yīng)用程序類(lèi)加載器(Application):這是Extension的子類(lèi)加載器,負(fù)責(zé)加載應(yīng)用程序的類(lèi)。它是ClassLoader的子類(lèi),通過(guò)調(diào)用父類(lèi)的loadClass()方法來(lái)加載類(lèi)。
?
詳細(xì)講解可以查看之前的文章:
JVM工作原理與實(shí)戰(zhàn)(八):類(lèi)加載器的分類(lèi)-CSDN博客文章瀏覽閱讀920次,點(diǎn)贊33次,收藏14次。JVM作為Java程序的運(yùn)行環(huán)境,其負(fù)責(zé)解釋和執(zhí)行字節(jié)碼,管理內(nèi)存,確保安全,支持多線程和提供性能監(jiān)控工具,以及確保程序的跨平臺(tái)運(yùn)行。本文主要介紹了類(lèi)加載器、類(lèi)加載器的分類(lèi)等內(nèi)容。https://blog.csdn.net/jiangyq_/article/details/135426071JVM工作原理與實(shí)戰(zhàn)(九):類(lèi)加載器-啟動(dòng)類(lèi)加載器-CSDN博客文章瀏覽閱讀1k次,點(diǎn)贊27次,收藏18次。JVM作為Java程序的運(yùn)行環(huán)境,其負(fù)責(zé)解釋和執(zhí)行字節(jié)碼,管理內(nèi)存,確保安全,支持多線程和提供性能監(jiān)控工具,以及確保程序的跨平臺(tái)運(yùn)行。本文主要介紹了啟動(dòng)類(lèi)加載器、通過(guò)啟動(dòng)類(lèi)加載器去加載用戶jar包等內(nèi)容。https://blog.csdn.net/jiangyq_/article/details/135445533JVM工作原理與實(shí)戰(zhàn)(十):類(lèi)加載器-Java類(lèi)加載器-CSDN博客文章瀏覽閱讀1k次,點(diǎn)贊27次,收藏16次。?JVM作為Java程序的運(yùn)行環(huán)境,其負(fù)責(zé)解釋和執(zhí)行字節(jié)碼,管理內(nèi)存,確保安全,支持多線程和提供性能監(jiān)控工具,以及確保程序的跨平臺(tái)運(yùn)行。本文主要介紹了擴(kuò)展類(lèi)加載器、通過(guò)擴(kuò)展類(lèi)加載器去加載用戶jar包、應(yīng)用程序類(lèi)加載器等內(nèi)容。 ?https://blog.csdn.net/jiangyq_/article/details/135467954
二、JDK9及之后的類(lèi)加載器
在JDK9發(fā)布之后,Java引入了模塊化系統(tǒng),導(dǎo)致類(lèi)加載器在設(shè)計(jì)上產(chǎn)生了重大變革。為了適應(yīng)這一變化,Java類(lèi)被封裝在jmod文件中,并保存在名為jmods的文件夾中。這樣的結(jié)構(gòu)有助于更好地管理和組織Java類(lèi),同時(shí)提高代碼的可維護(hù)性和安全性。
1.啟動(dòng)類(lèi)加載器
在JDK 9及之后的版本中,啟動(dòng)類(lèi)加載器是用Java編寫(xiě)的,并位于jdk.internal.loader.ClassLoaders類(lèi)中。
在Java中,BootClassLoader從模塊中尋找要加載的字節(jié)碼資源文件,這是通過(guò)繼承自內(nèi)置類(lèi)加載器BuiltinClassLoader并實(shí)現(xiàn)相應(yīng)的功能來(lái)實(shí)現(xiàn)的。
值得注意的是,啟動(dòng)類(lèi)加載器仍然無(wú)法通過(guò)Java代碼直接獲取,返回值仍然是null,從而保持了統(tǒng)一性。
2.平臺(tái)類(lèi)加載器(擴(kuò)展類(lèi)加載器)
在JDK 9及之后,擴(kuò)展類(lèi)加載器被替換為平臺(tái)類(lèi)加載器。這個(gè)類(lèi)加載器遵循模塊化方式加載字節(jié)碼文件,因此它的繼承關(guān)系從URLClassLoader變?yōu)榱薆uiltinClassLoader。BuiltinClassLoader實(shí)現(xiàn)了從模塊中加載字節(jié)碼文件的功能。平臺(tái)類(lèi)加載器的存在更多的是為了與老版本的設(shè)計(jì)方案兼容,自身并沒(méi)有特殊的邏輯。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-815028.html
總結(jié)
JVM是Java程序的運(yùn)行環(huán)境,負(fù)責(zé)字節(jié)碼解釋、內(nèi)存管理、安全保障、多線程支持、性能監(jiān)控和跨平臺(tái)運(yùn)行。本文主要介紹了JDK8及之前的類(lèi)加載器、JDK9及之后的類(lèi)加載器等內(nèi)容,希望對(duì)大家有所幫助。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-815028.html
到了這里,關(guān)于JVM工作原理與實(shí)戰(zhàn)(十四):JDK9及之后的類(lèi)加載器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!