SunJDK 中的 src.zip 文件是 Java 类库的源码,Oracle 仅开源了类库。若想要了解 native 方法的实现和 JDK 的实现,则需要查看 OpenJDK 的源码。
OpenJDK 是 SunJDK 的开源版本,由于版权原因,SunJDK 中的部分代码并未开放给 OpenJDK 使用,因此 OpenJDK 的源代码并不完整,只包含最精简的 JDK。但从 JDK7 开始,OpenJDK 作为了开发主干,SunJDK 在这个基础上发布。因此它们之间的大部分源码都相同,其差别几乎可以不计。
OpenJDK 源码的目录结构如下图所示:
corba,不常用的多语言、分布式通讯接口。
全称为 Common Object Request Broker Architecture(通用对象请求代理架构),基于对象-服务机制设计,类似于 JavaBean 和微软的 COM 技术。
- hotspot,JVM 实现。
jaxp,XML 处理。
全称为 Java API for XML Processing,是用于处理 XML 的 Java API,提供了解析和验证 XML 文档的能力。
JAXP 提供了三种接口来处理 XML 文档:
DOM 接口(文档对象模型解析),其源码位于 \jaxp\src\org\w3c\dom 目录。
SAX 接口(XML 简单 API 解析),其源码位于 \jaxp\src\org\xml\sax 目录。
StAX 接口(XML 流 API),其源码位于 \jaxp\src\javax\xml 目录。
除了解析接口,JAXP 还提供了 XSLT 接口用来对 XML 文档进行数据和结构的转换。
其源码位于 \jaxp\src\javax\xml\transform 目录。
jaxws,一组 XML Web Services 的 Java API。
全称为 Java API for Web Services,JAX-WS 允许开发者选择面向 RPC(RPC-oriented)或是面向消息(Message-oriented)的方式来实现自己的 Web Services。
- jdk,JDK 实现。
langtools,Java 语言工具。
包含 javac、javap 等实用程序的源码。
nashorn,JVM 上的 JavaScript 运行时。
基于 JSR-223 协议,Java 开发者可在 Java 程序中嵌入 JavaScript 代码。
jdk 目录包含了 JDK 的实现,JDK 的实现源码位于 jdk\src\share 目录,其目录结构如下图所示:
其中 classes 目录包含的是 Java 实现,native 目录包含的是 C++ 实现。
这两个目录的结构与 Java 包相对应。
- sample 和 demo 目录包含一些示例。
back、instrument、javavm、npt、transport 等目录包含了实现 Java 的基础部分的 C++ 源码,在这里可以从最底层理解 Java。
hotspot 目录包含了 JVM 的实现, HotSpot VM 的实现源码位于 jvm\src 目录,其目录结构如下所示:
-src
|-cpu CPU 相关代码(实现汇编器、模板解释器、ad 文件和部分 runtime 函数)
|-os 操作系相关代码
|-os_cpu 操作系统和 CPU 组合的相关代码
|-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 Concurrent Mark Sweep GC 的实现
| |-g1 Garbage-First 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)
|-precompiled
|-prims HotSpot VM 的对外接口,包括部分标准库的 native 部分实现和 JVMTI 实现
|-rumtime 运行时支持库(包括线程管理、编译器调度、锁、反射等)
|-services 用于支持 JMX 之类的管理功能的接口
|-shark 基于 LLVM 的 JIT 编译器(官方版未用)
|-trace
|-utilities 一些基本工具类