JVM獨家學習(1) 深入分析JVM,如何加載class

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種去,然後執行的?
後續我會給大家圖解這個問題?

本文中版權歸聚牛莊團隊所有,轉載請標註清楚。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章