深入理解java虛擬機——如何下載hotspot、jdk源碼

目錄

 

 

爲什麼要學習jvm

如何下載jdk源碼、hotspot源碼

Hotspot的目錄結構 


 

爲什麼要學習jvm


學習JVM對於一個Java程序員的好處大概可以概括爲下8點:

  1. 瞭解java的發展歷程,以及計算機語言的歷史發展進程。
  2. 垃圾回收算法與原理 
  3. 類字節碼規範與執行引擎 
  4. 內存模型與線程 
  5. 類加載機制
  6. 編譯器
  7. 高效併發,線程安全與鎖優化
  8. 性能監控以及jvm調優

可以從java語言運行的底層來了解java的運行原理

首先我們看一下

 

如何下載jdk源碼、hotspot源碼

1. 進入網址:,這個網http://hg.openjdk.java.net址下面列出了所有開源的openjdk項目,從中我們可以看到jdk項目。

 

 

2. jdk8u爲例說明

紅框標註的就是我們需要下載的hotspot、jdk源碼:

 

 

 

3.以hotspot爲例,進入如下頁面,我們在點擊browse, 就可以看到源碼的目錄結構了:

 

 

4. 最後點擊zip,就可以下載源碼的壓縮包了,下載jdk的方式同上

 

 

下載完畢後hotspot的文件目錄大致如下:

Hotspot的目錄結構 

Hotspot的目錄結構


├─agent                            Serviceability Agent的客戶端實現
├─make                             用來build出HotSpot的各種配置文件
├─src                              HotSpot VM的源代碼
│  ├─cpu                            CPU相關代碼(彙編器、模板解釋器、ad文件、部分runtime函數在這裏實現)
│  ├─os                             操作系相關代碼
│  ├─os_cpu                         操作系統+CPU的組合相關的代碼
│  └─share                          平臺無關的共通代碼
│      ├─tools                        工具
│      │  ├─hsdis                      反彙編插件
│      │  ├─IdealGraphVisualizer       將server編譯器的中間代碼可視化的工具
│      │  ├─launcher                   啓動程序“java”
│      │  ├─LogCompilation             將-XX:+LogCompilation輸出的日誌(hotspot.log)整理成更容易閱讀的格式的工具
│      │  └─ProjectCreator             生成Visual Studio的project文件的工具
│      └─vm                           HotSpot VM的核心代碼
│          ├─adlc                       平臺描述文件(上面的cpu或os_cpu裏的*.ad文件)的編譯器
│          ├─asm                        彙編器接口
│          ├─c1                         client編譯器(又稱“C1”)
│          ├─ci                         動態編譯器的公共服務/從動態編譯器到VM的接口
│          ├─classfile                  類文件的處理(包括類加載和系統符號表等)
│          ├─code                       動態生成的代碼的管理
│          ├─compiler                   從VM調用動態編譯器的接口
│          ├─gc_implementation          GC的實現
│          │  ├─concurrentMarkSweep      Concurrent Mark Sweep GC的實現
│          │  ├─g1                       Garbage-First GC的實現(不使用老的分代式GC框架)
│          │  ├─parallelScavenge         ParallelScavenge GC的實現(server VM默認,不使用老的分代式GC框架)
│          │  ├─parNew                   ParNew GC的實現
│          │  └─shared                   GC的共通實現
│          ├─gc_interface               GC的接口
│          ├─interpreter                解釋器,包括“模板解釋器”(官方版在用)和“C++解釋器”(官方版不在用)
│          ├─libadt                     一些抽象數據結構
│          ├─memory                     內存管理相關(老的分代式GC框架也在這裏)
│          ├─oops                       HotSpot VM的對象系統的實現
│          ├─opto                       server編譯器(又稱“C2”或“Opto”)
│          ├─prims                      HotSpot VM的對外接口,包括部分標準庫的native部分和JVMTI實現
│          ├─runtime                    運行時支持庫(包括線程管理、編譯器調度、鎖、反射等)
│          ├─services                   主要是用來支持JMX之類的管理功能的接口
│          ├─shark                      基於LLVM的JIT編譯器(官方版裏沒有使用)
│          └─utilities                  一些基本的工具類
└─test                             單元測試

 

後面我們會針對裏面的內容做詳細的講解學習。

希望可以和大家一起探討學習,共同提升知識技能。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章