java虛擬機器結構詳解(JVM)
廢話不多說,先直接上個圖:
上圖為JVM整體組成結構,有幾個模組組成:
1.class檔案生成模組:
通過jdk自帶的javac編譯命令生成
中間過程就是javac編譯程式內部處理的過程,核心就是針對原始碼詞法和語法的分析。
2.類載入器子系統模組:
JVM執行時自動建立,作用是將class位元組碼載入到jvm對應的記憶體中。類載入的核心就是classLoader,classLoader也是動態載入技術的核心。classLoader在此不作詳細介紹下一章再總結。
classLoader將class位元組碼載入到jvm記憶體中如下圖
上圖為jvm提供的幾種載入器
Eclipse中可以 動態載入一些jar可以拓展eclipse的功能,原理就是jvm提供了一個Custom ClassLoader的功能,讓我們可以載入指定jar包中的位元組碼檔案,拓展應用的功能,從而實現動態載入。android中繼承了jvm的這一特性,所以android也可以實現動態載入功能(之後也會詳細介紹android中基於此動態載入技術的熱修復、熱更新、元件化的內容)。
3.記憶體空間模組:
分為四個部分,分別儲存class位元組碼不同的部分。過程如下圖:
Loading:從檔案中獲取類的資訊並且載入到JVM的記憶體中
Verifying:檢查讀入的結構是否符合JVM規範的描述
Preparing:分配一個結構用來儲存類資訊
Resolving:把這個類的常量池中的所有的符號引用改變成直接引用
Initializing:執行靜態初始化程式,把靜態變數初始化成指定的值。所以在源java程式碼中寫的static修飾的屬性不會把值立即賦值給這個屬性,它會執行Loading、Verifying、Preparing、Resolving等步驟之後再進行初始化。
4.垃圾回收模組
這個暫時不做過多的敘述,以後的文章會提到。
5.其它模組:
如指令集、執行引擎、本地方法介面等等,都屬於jvm底層與CPU打交道的暫時不用深入。
好了,本篇文章就分享到這裡了。有興趣的新手夥伴們可以關注收藏起來,以後需要的時候可以多看看。如果有正在學java的程式設計師,可來我們的java技術學習扣qun哦:59789,1510裡面免費送java的視訊系統教程!