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│ │ │ │ │ ├── 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│ │ │ │ ├── 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└── projectsclasses 目录里的是 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│ ├── 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├── reflect├── rmi├── security├── swing├── text├── tools├── tracing└── utilnative/├── 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_teststree -L 3 -d hotspot/srcsrc├── 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_teststree -L 3 -d srcsrc/├── 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 一些基本的工具类
