jdk源碼垃圾「jdk源碼閱讀順序」

1、先說一下源碼解析的過程:JDK–>JRE–>JVM(以openJDK代替)

注意:這裡要了解jdk和jre和jvm他們分別是什麼?以及他們的關係才可以繼續。這裡先上一章從網上下載的關係圖方便理解

jdk源碼解析

2、筆者本地的jdk是oraclejdk,jvm所在位置就是安裝的jdk。jdk下jre下bin下server下的jvm.dll。也就是F:Javajdkjdk1.7.0_60jrebinserver這裡的jvm.dll。因為jvm.dll不能看,所以這裡以下載的openjdk源碼作為解析(
openjdk-7u40-fcs-src-b43-26_aug_2013.zip)。

3、openjdk源碼目錄結構這裡上圖:

jdk源碼解析

解釋:

openjdk

—— corba:不流行的多語言、分佈式通訊接口

—— hotspot:Java 虛擬機

—— jaxp:XML 處理

—— jaxws:一組 XML web services 的 Java API

—— jdk:java 開發工具包

—— —— 針對操作系統的部分

—— —— share:與平台無關的實現

—— langtools:Java 語言工具

—— nashorn:JVM 上的 JavaScript 運行時

4、因為要了解jvm虛擬機。所以進入hotspot目錄下

其中Hotspot就是我們要看的JVM包

Hotspot:全稱 Java HotSpot Performance Engine,是 Java 虛擬機的一個實現,包含了服務器版和桌面應用程序版。利用 JIT 及自適應優化技術(自動查找性能熱點並進行動態優化)來提高性能。

使用 java -version 可以查看 Hotspot 的版本。

  1. [machao@dev ~]$ java -version
  2. openjdk version “1.8.0_144”
  3. OpenJDK Runtime Environment (build 1.8.0_144-b01)
  4. OpenJDK 64-Bit Server VM (build 25.144-b01, mixed mode)
  5. [machao@dev ~]$

OpenJDK 64-Bit Server VM (build 25.144-b01, mixed mode)就是版本。

所以:我們詳解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 單元測試

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/207710.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-08 14:37
下一篇 2024-12-08 14:38

相關推薦

發表回復

登錄後才能評論