之前已經介紹了在Ubuntu 16.04上編譯OpenJDK8的源代碼和調試HotSpot源代碼。這一章將介紹HotSpot項目的目錄結構。 HotSpot目錄下主要由agent、make、src和test這4個子目錄構成。其中agent目錄下包含了Serviceability Agent的客戶端實 ...
之前已經介紹了在Ubuntu 16.04上編譯OpenJDK8的源代碼和調試HotSpot源代碼。這一章將介紹HotSpot項目的目錄結構。
HotSpot目錄下主要由agent、make、src和test這4個子目錄構成。其中agent目錄下包含了Serviceability Agent的客戶端實現;make目錄下包含了用於編譯HotSpot的各種配置文件;src目錄是最重要的一個目錄,本書講解的所有源代碼都包含在這個目錄下;test目錄下包含HotSpot相關的一些單元測試用例。
src目錄的結構如下圖所示。
src目錄下包含了HotSpot項目的主體源代碼,主要由cpu、os、os_cpu與share這4個子目錄構成。下麵簡單介紹一下這4個子目錄,如下:
-
cpu目錄:此目錄下包含一些依賴具體處理器架構的代碼,現在主流的處理器架構主要有sparc、x86和zero,其中x86又最為常見,筆者的電腦cpu也是x86架構,所以在在涉及到相關源代碼實現時,只會講解x86目錄下的源代碼實現。
-
os目錄:此目錄下包含一些依賴操作系統的代碼,主要的操作系統有基於linux內核的操作系統、基於unix的操作系統(posix)、windows和solaris。筆者的電腦是基於linux內核的Ubuntu操作系統,所以在涉及到相關源代碼實現時,只會講解linux目錄下的源代碼實現。
-
os_cpu目錄:此目錄下包含一些依賴操作系統和處理器架構的代碼,如linux_x86目錄。linux_x86目錄下包含的就是基於linux內核的操作系統和x86處理器架構相關的代碼,也是筆者本書要講解的源代碼實現。
-
share目錄:此目錄下包含了獨立於操作系統和處理器架構的代碼,尤其是vm子目錄,這個子目錄中包含的內容比較多,HotSpot主要的一些功能模塊都包含在這個子目錄下。下表介紹了vm目錄下一些重要子目錄的功能。
目錄 |
描述 |
adlc |
平臺描述文件 |
asm |
彙編器 |
c1 |
C1編譯器,即client編譯器 |
ci |
動態編譯器 |
classfile |
Class文件解析和類的鏈接等 |
code |
機器碼生成 |
compiler |
調用動態編譯器的介面 |
Opto |
C2編譯器,即server編譯器 |
gc_interface |
GC介面 |
gc_implementation |
垃圾收集器的具體實現 |
interpreter |
解釋器 |
libadt |
抽象數據結構 |
memory |
記憶體管理 |
oops |
JVM內部對象表示 |
prims |
HotSpot對外介面 |
runtime |
運行時 |
services |
JMX介面 |
utilizes |
內部工具類和公共函數 |