摘要:面試題類(lèi)加載器類(lèi)加載器源代碼文件通過(guò)編譯成字節(jié)碼文件后,需要被加載到虛擬機(jī)的內(nèi)存空間中使用,這個(gè)過(guò)程就是類(lèi)加載。該類(lèi)加載器在此目錄里面查找并加載類(lèi)。每一個(gè)類(lèi)加載器都有一個(gè)父裝載器。引導(dǎo)類(lèi)加載器處理完成后,把剩下的給擴(kuò)展類(lèi)加載器。
面試題:類(lèi)加載器 1. Java類(lèi)加載器
Java源代碼.java文件通過(guò)編譯成字節(jié)碼.class文件后,需要被加載到Java虛擬機(jī)的內(nèi)存空間中使用,這個(gè)過(guò)程就是類(lèi)加載。類(lèi)加載依靠的是Java類(lèi)加載器
Java類(lèi)加載器是Java運(yùn)行時(shí)環(huán)境的一部分,負(fù)責(zé)動(dòng)態(tài)加載Java類(lèi)到Java虛擬機(jī)的內(nèi)存空間中。類(lèi)通常是按需加載的,即第一次使用該類(lèi)時(shí)才加載。由于有了類(lèi)加載器,Java運(yùn)行時(shí)系統(tǒng)不需要知道文件的位置與文件系統(tǒng)。
2. JVM的3個(gè)默認(rèn)類(lèi)加載器引導(dǎo)(Bootstrap)類(lèi)加載器。由原生代碼C語(yǔ)言編寫(xiě),不繼承java.lang.ClassLoader。負(fù)責(zé)加載核心Java庫(kù),存儲(chǔ)在
擴(kuò)展(Extensions)類(lèi)加載器。用來(lái)在指明的目錄中加載Java的擴(kuò)展類(lèi)。Java虛擬機(jī)的實(shí)現(xiàn)會(huì)提供一個(gè)擴(kuò)展庫(kù)目錄。該類(lèi)加載器在此目錄里面查找并加載Java類(lèi)。該類(lèi)由sun.misc.Launcher$ExtClassLoader實(shí)現(xiàn)。
Apps類(lèi)加載器(也稱系統(tǒng)類(lèi)加載器)。根據(jù)Java應(yīng)用程序的類(lèi)路徑來(lái)加載Java類(lèi)。一般來(lái)說(shuō),Java應(yīng)用程序的類(lèi)都是由它來(lái)完成加載的,可以通過(guò)ClassLoader.getSystemClassLoader()來(lái)獲取它。該類(lèi)由sun.misc.Launcher$AppClassLoader來(lái)實(shí)現(xiàn)。
每一個(gè)類(lèi)加載器都有一個(gè)父裝載器(parent class loader)。
3. 如何保證一個(gè)類(lèi)被加載一次全盤(pán)負(fù)責(zé)委托機(jī)制
解釋?zhuān)寒?dāng)一個(gè)ClassLoader加載一個(gè)Class的時(shí)候,這個(gè)Class所依賴的和引用的其他Class通常也是由這個(gè)classloader負(fù)責(zé)載入的。例如加載一個(gè)普通的Demo類(lèi),Apps類(lèi)加載器首先拿到這個(gè)類(lèi)的class文件,先讓parent(父)類(lèi)加載器也就是擴(kuò)展(Extensions)類(lèi)加載器處理。擴(kuò)展(Extensions)類(lèi)加載器拿到class文件后同樣先讓parent(父)類(lèi)加載器處理,也就是引導(dǎo)(Bootstrap)類(lèi)加載器會(huì)先處理屬于它應(yīng)該加載的部分。引導(dǎo)類(lèi)加載器處理完成后,把剩下的給擴(kuò)展類(lèi)加載器。擴(kuò)展類(lèi)加載器處理屬于它的內(nèi)容,將剩下的部分交給Apps類(lèi)加載器,Apps類(lèi)加載器會(huì)加載剩下的全部?jī)?nèi)容。
每個(gè)類(lèi)加載器只會(huì)加載自己負(fù)責(zé)的部分。
這樣每個(gè)類(lèi)只會(huì)被加載一次。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/74265.html
摘要:面試題類(lèi)加載器類(lèi)加載器源代碼文件通過(guò)編譯成字節(jié)碼文件后,需要被加載到虛擬機(jī)的內(nèi)存空間中使用,這個(gè)過(guò)程就是類(lèi)加載。該類(lèi)加載器在此目錄里面查找并加載類(lèi)。引導(dǎo)類(lèi)加載器處理完成后,把剩下的給擴(kuò)展類(lèi)加載器。 面試題:類(lèi)加載器 1. Java類(lèi)加載器 Java源代碼.java文件通過(guò)編譯成字節(jié)碼.class文件后,需要被加載到Java虛擬機(jī)的內(nèi)存空間中使用,這個(gè)過(guò)程就是類(lèi)加載。類(lèi)加載依靠的是Ja...
摘要:為什么不是面向?qū)ο蟛皇敲嫦驅(qū)ο螅驗(yàn)樗瑐€(gè)原始數(shù)據(jù)類(lèi)型,例如。自定義類(lèi)加載器繼承的自定義類(lèi)加載器。可以像下面這樣指定參數(shù)面試題面向?qū)ο?,?lèi)加載器,基礎(chǔ)概念它們的關(guān)系如下啟動(dòng)類(lèi)加載器,實(shí)現(xiàn),沒(méi)有父類(lèi)。自定義類(lèi)加載器,父類(lèi)加載器為。 1. 為什么說(shuō)Java是一門(mén)平臺(tái)無(wú)關(guān)語(yǔ)言? 平臺(tái)無(wú)關(guān)實(shí)際的含義是一次編寫(xiě)到處運(yùn)行。Java 能夠做到是因?yàn)樗淖止?jié)碼(byte code)可以運(yùn)行在任何操作...
摘要:為什么不是面向?qū)ο蟛皇敲嫦驅(qū)ο?,因?yàn)樗瑐€(gè)原始數(shù)據(jù)類(lèi)型,例如。自定義類(lèi)加載器繼承的自定義類(lèi)加載器。可以像下面這樣指定參數(shù)面試題面向?qū)ο?,?lèi)加載器,基礎(chǔ)概念它們的關(guān)系如下啟動(dòng)類(lèi)加載器,實(shí)現(xiàn),沒(méi)有父類(lèi)。自定義類(lèi)加載器,父類(lèi)加載器為。 1. 為什么說(shuō)Java是一門(mén)平臺(tái)無(wú)關(guān)語(yǔ)言? 平臺(tái)無(wú)關(guān)實(shí)際的含義是一次編寫(xiě)到處運(yùn)行。Java 能夠做到是因?yàn)樗淖止?jié)碼(byte code)可以運(yùn)行在任何操作...
閱讀 2032·2023-04-26 00:59
閱讀 3288·2021-11-15 18:10
閱讀 3246·2021-09-22 16:02
閱讀 917·2021-09-02 15:15
閱讀 3891·2019-08-30 15:56
閱讀 2056·2019-08-30 15:54
閱讀 3008·2019-08-29 16:31
閱讀 2208·2019-08-29 16:10