虛擬機(jī)類加載機(jī)制
一、概述
代碼編譯的結(jié)果從本地機(jī)器碼轉(zhuǎn)變?yōu)樽止?jié)碼,是存儲格式發(fā)展的一小步,卻是編程語言發(fā)展的一大步.
虛擬機(jī)把描述類的數(shù)據(jù)從class文件加載到內(nèi)存,并對數(shù)據(jù)進(jìn)行校驗(yàn),轉(zhuǎn)換解析和初始化,最終形成可以被虛擬機(jī)直接使用的java類型, 這就是虛擬機(jī)的類加載機(jī)制.
與那些在編譯時(shí)需要進(jìn)行連接工作的語言不同, 在java語言里面,類型的加載,連接和初始化過程都是在程序運(yùn)行期間完成的,這種策略雖然會令類加載時(shí)稍微增加一些性能開銷, 但是會為java應(yīng)用程序提供高度的靈活性, java里天生可以動態(tài)擴(kuò)展的語言特性就是依賴運(yùn)行時(shí)期動態(tài)加載和動態(tài)連接這個(gè)特點(diǎn)實(shí)現(xiàn)的.例如, 如果編寫一個(gè)面向接口的應(yīng)用程序,可以等到運(yùn)行時(shí)再指定其實(shí)際的實(shí)現(xiàn)類; 用戶可以通過java預(yù)定義的和自定義類加載器, 讓一個(gè)本地的應(yīng)用程序可以在運(yùn)行時(shí)從網(wǎng)絡(luò)或其他地方加載一個(gè)二進(jìn)制流作為程序代碼的一部分,這種組裝應(yīng)用程序的方式目前已廣泛應(yīng)用于java程序之中. 從最基礎(chǔ)的Applet,JSP到相對復(fù)雜的OSGI技術(shù),都使用了java語言運(yùn)行期類加載的特性.