1、先說一下源碼解析的過程:JDK–>JRE–>JVM(以openJDK代替)
注意:這里要了解jdk和jre和jvm他們分別是什么?以及他們的關(guān)系才可以繼續(xù)。這里先上一章從網(wǎng)上下載的關(guān)系圖方便理解
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源碼目錄結(jié)構(gòu)這里上圖:
解釋:
openjdk
——corba:不流行的多語言、分布式通訊接口
——hotspot:Java虛擬機(jī)
——jaxp:XML處理
——jaxws:一組XMLwebservices的JavaAPI
——jdk:java開發(fā)工具包
————針對操作系統(tǒng)的部分
————share:與平臺無關(guān)的實現(xiàn)
——langtools:Java語言工具
——nashorn:JVM上的JavaScript運(yùn)行時
4、因為要了解jvm虛擬機(jī)。所以進(jìn)入hotspot目錄下
其中Hotspot就是我們要看的JVM包
Hotspot:全稱JavaHotSpotPerformanceEngine,是Java虛擬機(jī)的一個實現(xiàn),包含了服務(wù)器版和桌面應(yīng)用程序版。利用JIT及自適應(yīng)優(yōu)化技術(shù)(自動查找性能熱點(diǎn)并進(jìn)行動態(tài)優(yōu)化)來提高性能。
使用java-version可以查看Hotspot的版本。
[machao@dev~]$java-versionopenjdkversion“1.8.0_144”OpenJDKRuntimeEnvironment(build1.8.0_144-b01)OpenJDK64-BitServerVM(build25.144-b01,mixedmode)[machao@dev~]$OpenJDK64-BitServerVM(build25.144-b01,mixedmode)就是版本。
所以:我們詳解hotspot目錄結(jié)構(gòu)
├─agentServiceabilityAgent的客戶端實現(xiàn)
├─make用來build出HotSpot的各種配置文件
├─srcHotSpotVM的源代碼
│├─cpuCPU相關(guān)代碼(匯編器、模板解釋器、ad文件、部分runtime函數(shù)在這里實現(xiàn))
│├─os操作系相關(guān)代碼
│├─os_cpu操作系統(tǒng)+CPU的組合相關(guān)的代碼
│└─share平臺無關(guān)的共通代碼
│├─tools工具
││├─hsdis反匯編插件
││├─IdealGraphVisualizer將server編譯器的中間代碼可視化的工具
││├─launcher啟動程序“java”
││├─LogCompilation將-XX:+LogCompilation輸出的日志(hotspot.log)整理成更容易閱讀的格式的工具
││└─ProjectCreator生成VisualStudio的project文件的工具
│└─vmHotSpotVM的核心代碼
│├─adlc平臺描述文件(上面的cpu或os_cpu里的*.ad文件)的編譯器
│├─a***匯編器接口
│├─c1client編譯器(又稱“C1”)
│├─ci動態(tài)編譯器的公共服務(wù)/從動態(tài)編譯器到VM的接口
│├─classfile類文件的處理(包括類加載和系統(tǒng)符號表等)
│├─code動態(tài)生成的代碼的管理
│├─compiler從VM調(diào)用動態(tài)編譯器的接口
│├─gc_implementationGC的實現(xiàn)
││├─concurrentMarkSweepConcurrentMarkSweepGC的實現(xiàn)
││├─g1Garbage-FirstGC的實現(xiàn)(不使用老的分代式GC框架)
││├─parallelScavengeParallelScavengeGC的實現(xiàn)(serverVM默認(rèn),不使用老的分代式GC框架)
││├─parNewParNewGC的實現(xiàn)
││└─sharedGC的共通實現(xiàn)
│├─gc_interfaceGC的接口
│├─interpreter解釋器,包括“模板解釋器”(官方版在用)和“C++解釋器”(官方版不在用)
│├─libadt一些抽象數(shù)據(jù)結(jié)構(gòu)
│├─memory內(nèi)存管理相關(guān)(老的分代式GC框架也在這里)
│├─oopsHotSpotVM的對象系統(tǒng)的實現(xiàn)
│├─optoserver編譯器(又稱“C2”或“Opto”)
│├─primsHotSpotVM的對外接口,包括部分標(biāo)準(zhǔn)庫的native部分和JVMTI實現(xiàn)
│├─runtime運(yùn)行時支持庫(包括線程管理、編譯器調(diào)度、鎖、反射等)
│├─services主要是用來支持JMX之類的管理功能的接口
│├─shark基于LLVM的JIT編譯器(官方版里沒有使用)
│└─utilities一些基本的工具類
└─test單元測試