開啟正文之前,先說一下源碼剖析這一系列,就以“死磕到底”的精神貫徹始終,JDK--》JRE--》JVM(以openJDK代替)
最近想看看JDK8源碼,但JDK中JVM(安裝在本地C:\Program Files\Java\jdk1.8.0_121\jre\bin\server下jvm.dll)本身並不開源,只能找來openJDK來看(說是和JDK相似度很高)。源碼包下載飛機票:http://download.java.net/openjdk/jdk8 (有時會壞,附上百度網盤https://pan.baidu.com/s/1o8bXbPC) 下載openjdk-8-src-b132-03_mar_2014.zip
下載完后發現目錄結構很多,大體如下:
一、OpenJDK 源碼的目錄結構
openjdk
—— corba:不流行的多語言、分布式通訊接口
—— hotspot:Java 虛擬機
—— jaxp:XML 處理
—— jaxws:一組 XML web services 的 Java API
—— jdk:java 開發工具包
—— —— 針對操作系統的部分
—— —— share:與平台無關的實現
—— langtools:Java 語言工具
—— nashorn:JVM 上的 JavaScript 運行時
其中Hotspot就是我們要看的JVM包
Hotspot:全稱 Java HotSpot Performance Engine,是 Java 虛擬機的一個實現,包含了服務器版和桌面應用程序版。利用 JIT 及自適應優化技術(自動查找性能熱點並進行動態優化)來提高性能。
使用 java -version
可以查看 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 單元測試
=====================================================
下一篇:源碼剖析二: 對象內存布局、JVM鎖以及優化