HotSpot項目結構


之前已經介紹了在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源碼剖析系列文章!

   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM