以前已經介紹了在Ubuntu 16.04上編譯OpenJDK8的源代碼和調試HotSpot源代碼。這一章將介紹HotSpot項目的目錄結構。html
HotSpot目錄下主要由agent、make、src和test這4個子目錄構成。其中agent目錄下包含了Serviceability Agent的客戶端實現;make目錄下包含了用於編譯HotSpot的各類配置文件;src目錄是最重要的一個目錄,本書講解的全部源代碼都包含在這個目錄下;test目錄下包含HotSpot相關的一些單元測試用例。linux
src目錄的結構以下圖所示。windows
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目錄下一些重要子目錄的功能。oop
目錄單元測試 |
描述測試 |
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 |
內部工具類和公共函數 |
關注我的博客www.classloading.com或公衆號,有HotSpot源碼剖析系列文章!