之前已經介紹了在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 |
內部工具類和公共函式 |
1、在Ubuntu 16.04上編譯OpenJDK8的源代碼
2、除錯HotSpot源代碼
3、HotSpot專案結構
4、HotSpot的啟動程序
5、HotSpot二分模型(1)
6、HotSpot的類模型(2)
7、HotSpot的類模型(3)
8、HotSpot的類模型(4)
9、HotSpot的物件模型(5)
10、HotSpot的物件模型(6)
11、操作句柄Handle(7)
12、句柄Handle的釋放(8)
13、類加載器
14、類的雙親委派機制
15、核心類的預裝載
16、Java主類的裝載
17、觸發類的裝載
18、類檔案介紹
19、檔案流
20、決議Class檔案
21、常量池決議(1)
22、常量池決議(2)
23、欄位決議(1)
24、欄位決議之偽共享(2)
25、欄位決議(3)
26、欄位決議之OopMapBlock(4)
27、方法決議之Method與ConstMethod介紹
28、方法決議
29、klassVtable與klassItable類的介紹
30、計算vtable的大小
31、計算itable的大小
32、決議Class檔案之創建InstanceKlass物件
33、欄位決議之欄位注入
34、類的連接
35、類的連接之驗證
36、類的連接之重寫(1)
37、類的連接之重寫(2)
38、方法的連接
39、初始化vtable
40、初始化itable
41、類的初始化
42、物件的創建
43、Java參考型別
44、Java參考型別之軟參考(1)
45、Java參考型別之軟參考(2)
46、Java參考型別之弱參考與幻像參考
47、Java參考型別之最終參考
作者持續維護的個人博客 classloading.com,
關注公眾號,有HotSpot原始碼剖析系列文章!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/153360.html
標籤:Java
