JVM如何加載class,有哪些加載器?我們就把JVM開膛破肚。
開場預熱
上一篇我說了java是如何運行起來的。以及一些運行的原理,但是這些還遠遠不夠,我們會在這個專欄裏面詳細的介紹JVM的內部,以及在實際開發的過程中我們是如何玩的jvm,我在jvm有數年的經驗和理解,希望可以幫助更多的人,我們一起進步,對正在找工作的想要在面試官眼前一亮的,或者在這塊有更深的突破的,希望在這個博客能夠對你們有所幫助。在後續的介紹中,我回儘量的少打文字了,我本人也不喜歡寫過多的文字,因爲我們做程序的喜歡,一句話多個案例和圖例來加深印象。
JVM加載一個class圖解
一個類從加載到使用,一般會經歷下面的這個過程 看圖:
加載->驗證->準備->初始化->使用->卸載銷燬
面試:什麼情況下會加載一個類?
所以要搞明白這個問題,就是JVM執行我們寫好的代碼過程中,什麼情況會加載一個class?
話外音:就是什麼時候.class字節碼會加載到JVM內存中去。
其實通過這個圖已經很清楚了,就是你的代碼中用到了這個類的時候就會加載。
面試:解釋一個類加載器和雙親委派機制
java裏面有哪些加載器?簡單來說就是下面這幾種:
1.Bootstrap classloader 啓動類加載器。
他主要負責加載機器上安裝的核心類,會去加載你的java安裝目錄下的lib目錄中的核心類庫。
2.Extension classloader 擴展類加載器
這個類加載器主要是加載你java安裝目錄的lib/ext目錄的類庫。
3.Application classloader 應用程序類加載器
這個類加載器就複雜加載 classpath環境變量所指定路徑的累,其實就是去加載工程裏面寫好的代碼,這個類就負責加載寫好的類到內存中去。
4.自定義類加載器
除了上面的幾種外,還可以自己定位加載器,根據自己的需求去加載類。
5.雙親委派機制
就是應用程序類加載需要加載一個類,會首先委派給自己的父親加載器會加載,最終會傳導最頂層的類加載器去加載。通過上面的圖就可以很清晰的看到這個過程。
我給大家留一個思考題?
java大部分同學都是開發WEB系統,我們部署都是採用tomcat之類的WEB容器來部署。那麼tomcat的類加載機制應該怎麼設計,才能把我們動態部署的程序加載tomcat自身運行的JVM種去,然後執行的?
後續我會給大家圖解這個問題?
本文中版權歸聚牛莊團隊所有,轉載請標註清楚。