1.整个目录结构
1.1 openjdk9
tree -L 2 -d
├── build
│ └── linux-x86_64-normal-server-slowdebug
├── common
│ ├── autoconf
│ ├── bin
│ ├── conf
│ ├── doc
│ ├── nb_native
│ └── src
├── corba Common Object Request Broker Architecture,通用对象请求代理架构
是基于“对象-服务”机制设计,与 JavaBean、COM 等是同种范畴。
│ ├── make
│ └── src
├── hotspot
│ ├── make
│ ├── src
│ └── test
├── jaxp 全称 Java API for XML Processing,处理 XML 的Java API,是 Java XML
程序设计的应用程序接口之一,它提供解析和验证XML文档的能力。
│ ├── nbproject
│ ├── src
│ └── test
├── jaxws 全称 Java API for Web Services,JAX-WS 允许开发者选择 RPC-oriented
(面向 RPC) 或者 message-oriented(消息通信,erlang 使用的就是消息通信,
不过 Java 内存模型是内存共享)来实现自己的web services。通过 Web Services
提供的环境,可以实现 Java 与其他编程语言的交互(事实上就是 thrift 所做的,
任何一种语言都可以通过 Web Services 实现与其他语言的通信,客户端用一种语言,
服务器端可以用其他语言)。
│ ├── nbproject
│ └── src
├── jdk Java Development Kit
│ ├── make
│ ├── src
│ └── test
├── langtools Java 语言工具。包含 javac、javap 等实用程序的源码。
│ ├── make
│ ├── src
│ └── test
├── make
│ ├── common
│ ├── devkit
│ ├── idea
│ ├── scripts
│ ├── templates
│ └── test
├── nashorn Nashorn 项目的目的是基于 Java 在 JVM 上实现一个轻量级高性能的 JavaScript
运行环境。基于 JSR-223 协议,Java 程序员可在 Java 程序中嵌入 JavaScript 代码。
该项目使用了 JSR-229 里描述的新连接机制(从 Java 7 起开始使用的连接机制):
新的字节码(invokedynamic)以及新的基于方法句柄(method handle)的连接机制。
通过接口注入(interface injection)在运行时修改类也是 JSR-229 里的内容。
│ ├── bin
│ ├── buildtools
│ ├── docs
│ ├── exclude
│ ├── make
│ ├── samples
│ ├── src
│ └── test
└── test
├── failure_handler
├── fmw
├── jtreg-ext
├── lib
├── lib-test
└── make
1.2 openjdk8
.
├── common
│ ├── autoconf
│ ├── bin
│ ├── nb_native
│ └── src
├── corba
│ ├── make
│ └── src
├── hotspot
│ ├── agent
│ ├── make
│ ├── src
│ └── test
├── jaxp
│ ├── make
│ ├── nbproject
│ └── src
├── jaxws
│ ├── make
│ ├── nbproject
│ └── src
├── jdk
│ ├── make
│ ├── src
│ │ ├── aix
│ │ ├── bsd
│ │ ├── linux
│ │ ├── macosx
│ │ ├── share
│ │ │ ├── back
│ │ │ ├── bin
│ │ │ ├── classes
│ │ │ │ ├── com
│ │ │ │ │ ├── oracle
│ │ │ │ │ └── sun
│ │ │ │ ├── java
│ │ │ │ │ ├── applet
│ │ │ │ │ ├── awt
│ │ │ │ │ ├── beans
│ │ │ │ │ ├── io
│ │ │ │ │ ├── lang
│ │ │ │ │ ├── math
│ │ │ │ │ ├── net
│ │ │ │ │ ├── nio
│ │ │ │ │ ├── rmi
│ │ │ │ │ ├── security
│ │ │ │ │ ├── sql
│ │ │ │ │ ├── text
│ │ │ │ │ ├── time
│ │ │ │ │ └── util
│ │ │ │ ├── javax
│ │ │ │ │ ├── accessibility
│ │ │ │ │ ├── crypto
│ │ │ │ │ ├── imageio
│ │ │ │ │ ├── management
│ │ │ │ │ ├── naming
│ │ │ │ │ ├── net
│ │ │ │ │ ├── print
│ │ │ │ │ ├── rmi
│ │ │ │ │ ├── script
│ │ │ │ │ ├── security
│ │ │ │ │ ├── smartcardio
│ │ │ │ │ ├── sound
│ │ │ │ │ ├── sql
│ │ │ │ │ ├── swing
│ │ │ │ │ └── xml
│ │ │ │ ├── jdk
│ │ │ │ │ ├── internal
│ │ │ │ │ └── net
│ │ │ │ ├── org
│ │ │ │ │ ├── ietf
│ │ │ │ │ └── jcp
│ │ │ │ └── sun
│ │ │ │ ├── applet
│ │ │ │ ├── audio
│ │ │ │ ├── awt
│ │ │ │ ├── dc
│ │ │ │ ├── font
│ │ │ │ ├── instrument
│ │ │ │ ├── invoke
│ │ │ │ ├── java2d
│ │ │ │ ├── jvmstat
│ │ │ │ ├── launcher
│ │ │ │ ├── management
│ │ │ │ ├── misc
│ │ │ │ ├── net
│ │ │ │ ├── nio
│ │ │ │ ├── print
│ │ │ │ ├── reflect
│ │ │ │ ├── rmi
│ │ │ │ ├── security
│ │ │ │ ├── swing
│ │ │ │ ├── text
│ │ │ │ ├── tools
│ │ │ │ ├── tracing
│ │ │ │ └── util
│ │ │ ├── demo
│ │ │ ├── doc
│ │ │ ├── instrument
│ │ │ ├── javavm
│ │ │ ├── lib
│ │ │ ├── native
│ │ │ │ ├── com
│ │ │ │ │ └── sun
│ │ │ │ ├── common
│ │ │ │ ├── java
│ │ │ │ │ ├── io
│ │ │ │ │ ├── lang
│ │ │ │ │ ├── net
│ │ │ │ │ ├── nio
│ │ │ │ │ ├── security
│ │ │ │ │ └── util
│ │ │ │ └── sun
│ │ │ │ ├── awt
│ │ │ │ ├── font
│ │ │ │ ├── java2d
│ │ │ │ ├── management
│ │ │ │ ├── misc
│ │ │ │ ├── nio
│ │ │ │ ├── reflect
│ │ │ │ ├── security
│ │ │ │ └── tracing
│ │ │ ├── npt
│ │ │ ├── sample
│ │ │ └── transport
│ │ ├── solaris
│ │ └── windows
│ └── test
├── langtools
│ ├── make
│ ├── src
│ └── test
├── make
│ ├── common
│ ├── devkit
│ ├── scripts
│ └── templates
├── nashorn
│ ├── bin
│ ├── buildtools
│ ├── docs
│ ├── exclude
│ ├── make
│ ├── samples
│ ├── src
│ ├── test
│ └── tools
└── test
└── projects
classes 目录里的是 Java 的实现,native 目录里的是 C++ 的实现,两部分基本对应。这两个目录里的结构与 java 的包也是对应。
classes/
├── com
│ ├── oracle
│ └── sun
├── java
│ ├── applet
│ ├── awt
│ ├── beans
│ ├── io
│ ├── lang
│ ├── math
│ ├── net
│ ├── nio
│ ├── rmi
│ ├── security
│ ├── sql
│ ├── text
│ ├── time
│ └── util
├── javax
│ ├── accessibility
│ ├── crypto
│ ├── imageio
│ ├── management
│ ├── naming
│ ├── net
│ ├── print
│ ├── rmi
│ ├── script
│ ├── security
│ ├── smartcardio
│ ├── sound
│ ├── sql
│ ├── swing
│ └── xml
├── jdk
│ ├── internal
│ └── net
├── org
│ ├── ietf
│ └── jcp
└── sun
├── applet
├── audio
├── awt
├── dc
├── font
├── instrument
├── invoke
├── java2d
├── jvmstat
├── launcher
├── management
├── misc
├── net
├── nio
├── print
├── reflect
├── rmi
├── security
├── swing
├── text
├── tools
├── tracing
└── util
native/
├── com
│ └── sun
├── common
├── java
│ ├── io
│ ├── lang
│ ├── net
│ ├── nio
│ ├── security
│ └── util
└── sun
├── awt
├── font
├── java2d
├── management
├── misc
├── nio
├── reflect
├── security
└── tracing
2.hotspot目录结构
2.1 openjdk9
tree -L 2 -d hotspot
hotspot/
├── make
│ ├── copy
│ ├── gensrc
│ ├── ide
│ ├── lib
│ ├── mapfiles
│ ├── src
│ ├── symbols
│ └── test
├── src
│ ├── cpu
│ ├── jdk.aot
│ ├── jdk.hotspot.agent
│ ├── jdk.internal.vm.ci
│ ├── jdk.internal.vm.compiler
│ ├── os
│ ├── os_cpu
│ └── share
└── test
├── compiler
├── gc
├── native
├── native_sanity
├── runtime
├── sanity
├── serviceability
├── testlibrary
└── testlibrary_tests
tree -L 3 -d hotspot/src
src
├── cpu
│ ├── aarch64
│ │ └── vm
│ ├── arm
│ │ └── vm
│ ├── ppc
│ │ └── vm
│ ├── s390
│ │ └── vm
│ ├── sparc
│ │ └── vm
│ ├── x86
│ │ └── vm
│ └── zero
│ └── vm
├── jdk.aot
│ ├── share
│ │ └── classes
│ └── unix
│ └── native
├── jdk.hotspot.agent
│ ├── doc
│ ├── linux
│ │ └── native
│ ├── macosx
│ │ └── native
│ ├── scripts
│ ├── share
│ │ ├── classes
│ │ └── native
│ ├── solaris
│ │ └── native
│ ├── test
│ │ └── libproc
│ └── windows
│ └── native
├── jdk.internal.vm.ci
│ └── share
│ └── classes
├── jdk.internal.vm.compiler
│ └── share
│ └── classes
├── os
│ ├── aix
│ │ └── vm
│ ├── bsd
│ │ ├── dtrace
│ │ ├── launcher
│ │ └── vm
│ ├── linux
│ │ └── vm
│ ├── posix
│ │ ├── dtrace
│ │ └── vm
│ ├── solaris
│ │ ├── dtrace
│ │ └── vm
│ └── windows
│ └── vm
├── os_cpu
│ ├── aix_ppc
│ │ └── vm
│ ├── bsd_x86
│ │ └── vm
│ ├── bsd_zero
│ │ └── vm
│ ├── linux_aarch64
│ │ └── vm
│ ├── linux_arm
│ │ └── vm
│ ├── linux_ppc
│ │ └── vm
│ ├── linux_s390
│ │ └── vm
│ ├── linux_sparc
│ │ └── vm
│ ├── linux_x86
│ │ └── vm
│ ├── linux_zero
│ │ └── vm
│ ├── solaris_sparc
│ │ └── vm
│ ├── solaris_x86
│ │ └── vm
│ └── windows_x86
│ └── vm
└── share
├── tools
│ ├── hsdis
│ ├── IdealGraphVisualizer
│ └── LogCompilation
└── vm
├── adlc
├── aot
├── asm
├── c1
├── ci
├── classfile
├── code
├── compiler
├── gc
├── interpreter
├── jvmci
├── libadt
├── logging
├── memory
├── oops
├── opto
├── precompiled
├── prims
├── runtime
├── services
├── shark
├── trace
└── utilities
2.2 openjdk8
hotspot/
├── agent Serviceability Agent的实现
│ ├── doc
│ ├── make
│ ├── src
│ └── test
├── make 用来build出HotSpot的各种配置文件
│ ├── aix
│ ├── bsd
│ ├── linux
│ ├── solaris
│ ├── templates
│ └── windows
├── src HotSpot VM的源代码
│ ├── cpu CPU相关代码(汇编器、模板解释器、ad文件、部分runtime函数在这里实现)
│ ├── os 操作系相关代码
│ ├── os_cpu 操作系统+CPU的组合相关的代码
│ └── share 平台无关的公共代码
└── test
├── compiler
├── gc
├── gc_implementation
├── runtime
├── sanity
├── serviceability
├── stress
├── testlibrary
└── testlibrary_tests
tree -L 3 -d src
src/
├── cpu
│ ├── ppc
│ │ └── vm
│ ├── sparc
│ │ └── vm
│ ├── x86
│ │ └── vm
│ └── zero
│ └── vm
├── os
│ ├── aix
│ │ └── vm
│ ├── bsd
│ │ ├── dtrace
│ │ ├── launcher
│ │ └── vm
│ ├── linux
│ │ └── vm
│ ├── posix
│ │ └── vm
│ ├── solaris
│ │ ├── dtrace
│ │ └── vm
│ └── windows
│ └── vm
├── os_cpu
│ ├── aix_ppc
│ │ └── vm
│ ├── bsd_x86
│ │ └── vm
│ ├── bsd_zero
│ │ └── vm
│ ├── linux_ppc
│ │ └── vm
│ ├── linux_sparc
│ │ └── vm
│ ├── linux_x86
│ │ └── vm
│ ├── linux_zero
│ │ └── vm
│ ├── solaris_sparc
│ │ └── vm
│ ├── solaris_x86
│ │ └── vm
│ └── windows_x86
│ └── vm
└── share
├── tools
│ ├── hsdis 反汇编插件
│ ├── IdealGraphVisualizer 将server编译器的中间代码可视化的工具
│ ├── 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
│ ├── g1
│ ├── parallelScavenge
│ ├── parNew
│ └── shared GC的通用实现
├── gc_interface GC接口
├── interpreter 解释器,包括“模板解释器”(官方版在用)和“C++解释器”(官方版不在用)
├── libadt 一些抽象数据结构
├── memory 内存管理相关(老的分代式GC框架也在这里)
├── oops HotSpot VM的对象系统的实现
├── opto server编译器(又称“C2”或“Opto”)
├── precompiled
├── prims HotSpot VM的对外接口,包括部分标准库的native部分和JVMTI实现
├── runtime 运行时支持库(包括线程管理、编译器调度、锁、反射等)
├── services 主要是用来支持JMX之类的管理功能的接口
├── shark 基于LLVM的JIT编译器(官方版里没有使用)
├── trace
└── utilities 一些基本的工具类