1. 程式人生 > >java虛擬機器結構詳解(JVM)

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的視訊系統教程!