1.JDK源码阅读之环境搭建

1.代码下载

openjdk github地址:https://github.com/openjdk/jdk/tree/jdk8-b120
这里我选择的是jdk8的最后一个版本
下载之后使用idea打开,如下图所示
在这里插入图片描述

2. 构建

2.1 获取你的电脑上要安装的软件

下面列出了各个操作系统上需要前置安装的软件

LinuxSolarisWindowsMac OS X
alsa, freetype, cups, xrender.Studio Compilers, freetype, cups, xrender.Visual Studio 2010,CYGWIN or MinGW/MSYSXCode 4.5.2

2.1.1 Linux

使用 Linux 时,尽量优先使用系统自带的软件包,而不是自己构建或从其他地方获取软件包。大多数 Linux 构建应该可以使用系统提供的软件包完成。

请注意,一些 Linux 系统习惯于为你预先设置环境变量,例如,JAVA_HOME 可能会被预定义为指向你系统上安装的 JDK。你需要取消设置 JAVA_HOME。建议运行 env 命令,检查从系统默认设置中获取的环境变量是否适合构建 OpenJDK。

2.1.2 Solaris

至少需要 Studio 12 Update 1 Compilers (包含版本 5.10 的 C 和 C++ 编译器),并且需要包含特定的补丁。

Solaris SPARC 补丁列表如下:

118683-05: SunOS 5.10: 用于分析库和汇编器的补丁
119963-21: SunOS 5.10: C++ 共享库补丁
120753-08: SunOS 5.10: 微任务库(libmtsk)补丁
128228-09: Sun Studio 12 更新 1: Sun C++ 编译器补丁
141860-03: Sun Studio 12 更新 1: Sun C、C++、F77、F95 编译器通用补丁
141861-05: Sun Studio 12 更新 1: Sun C 编译器补丁
142371-01: Sun Studio 12.1 更新 1: dbx 补丁
143384-02: Sun Studio 12 更新 1: 调试信息处理补丁
143385-02: Sun Studio 12 更新 1: Sun C、C++、F77、F95 编译器通用补丁
142369-01: Sun Studio 12.1: 性能分析工具补丁
Solaris X86 补丁列表如下:

119961-07: SunOS 5.10_x86, x64: 用于分析库和汇编器的补丁
119964-21: SunOS 5.10_x86: C++_x86 共享库补丁
120754-08: SunOS 5.10_x86: 微任务库(libmtsk)补丁
141858-06: Sun Studio 12 更新 1_x86: x86 后端的 Sun 编译器通用补丁
128229-09: Sun Studio 12 更新 1_x86: C++ 编译器补丁
142363-05: Sun Studio 12 更新 1_x86: C 编译器补丁
142368-01: Sun Studio 12.1_x86: 性能分析工具补丁
将 bin 目录放入 PATH 中。

Oracle Solaris Studio Express 编译器也可以选择,可以在 这里 获取,尽管这些编译器还没有被广泛使用。

2.1.3 Windows

在 Windows 上进行构建需要一个类 Unix 的环境,尤其是一个类 Unix 的 shell。目前有几种这样的环境可用,其中 CygwinMinGW/MSYS 是 OpenJDK 构建所支持的。与标准的 Windows 工具相比,这些系统的一个区别在于它们处理 Windows 路径名的方式,特别是包含空格、反斜杠作为路径分隔符以及可能包含驱动器字母的路径名。根据具体的使用场景和每个环境的特点,这些路径问题可以通过以下组合来解决:引用整个路径、将反斜杠转换为正斜杠、用额外的反斜杠转义反斜杠以及将路径名转换为其 “8.3” 版本

2.1.3.1 CYGWIN

CYGWIN 是一种开源的、类似 Linux 的环境,它试图在 Windows 上模拟一个完整的 POSIX 层。它在处理路径名时比较智能,通常可以处理各种路径,只要这些路径被正确引用或转义。内部而言,它将驱动器字母 : 映射到一个虚拟目录 /cygdrive/。

你可以始终使用 cygpath 工具将包含空格或反斜杠字符的路径名映射成 C:/ 样式的路径名(称为“混合”模式),例如 cygpath -s -m “path”。

需要注意的是,使用 CYGWIN 在设置 PATH 变量时会引发一个独特的问题。通常在 Windows 上,PATH 变量包含用 “;” 字符分隔的目录(Solaris 和 Linux 使用 “:”)。在 CYGWIN 中,它使用 “:”, 但这意味着像 “C:/path” 这样的路径不能放在 CYGWIN 版本的 PATH 中,而是需要使用类似 /cygdrive/c/path 这样的路径,这种路径只有 CYGWIN 能理解。

OpenJDK 构建需要 CYGWIN 版本 1.7.16 或更新版本。有关 CYGWIN 的信息可以从 CYGWIN 网站(www.cygwin.com)获取。

默认情况下,CYGWIN 不会安装构建 OpenJDK 所需的所有工具。除了默认安装之外,你还需要安装以下工具。

二进制名称分类描述
ar.exeDevelbinutilsGNU 汇编器、链接器和二进制工具
make.exeDevelmake为 CYGWIN 构建的 GNU 版本的 ‘make’ 工具
m4.exeInterpretersm4传统 Unix 宏处理器的 GNU 实现
cpio.exeUtilscpio一个管理文件归档的程序
gawk.exeUtilsawk模式导向的扫描和处理语言
file.exeUtilsfile使用“魔数”确定文件类型
zip.exeArchivezip打包和压缩(归档)文件
unzip.exeArchiveunzip解压 ZIP 压缩文件
free.exeSystemprocps显示系统中已用和可用的内存量

请注意,CYGWIN 软件可能会与您 Windows 系统上的其他非 CYGWIN 软件发生冲突。CYGWIN 提供了一个常见问题解答(FAQ),其中包含已知问题和故障,特别值得关注的是关于 BLODA(干扰 CYGWIN 的应用程序)部分。

2.1.3.2 MinGW/MSYS

MinGW(“Minimalist GNU for Windows”)是一套免费的 Windows 专用头文件和导入库,结合 GNU 工具集,使得能够生成不依赖任何第三方 C 运行时 DLL 的原生 Windows 程序。MSYS 是 MinGW 的补充,允许构建依赖于传统 UNIX 工具的应用程序和程序。其中包括 bash 和 make 等工具。有关更多信息,请参见 MinGW/MSYS

与 Cygwin 类似,MinGW/MSYS 可以处理不同类型的路径格式。它们会被内部转换为带有正斜杠的路径,并将驱动器号 : 替换为虚拟目录 /。此外,MSYS 会自动检测为 MSYS 环境编译的二进制文件,并为它们提供内部的 Unix 风格路径名。如果在 MSYS 程序中调用原生 Windows 应用程序,它们的路径参数会自动转换回带有驱动器号和反斜杠的 Windows 风格路径名。这可能会对使用正斜杠作为参数分隔符的 Windows 应用程序(例如 cl /nologo /I)造成问题,因为 MSYS 可能会错误地将这些参数替换为驱动器号

除了默认安装的工具外,您还需要手动安装 msys-zip 和 msys-unzip 包。这可以通过 MinGW 命令行安装程序轻松完成:

mingw-get.exe install msys-zip
mingw-get.exe install msys-unzip
2.1.3.3 Visual Studio 2010 Compilers

32 位和 64 位的 OpenJDK Windows 构建需要 Microsoft Visual Studio C++ 2010 (VS2010) 专业版或 Express 编译器。编译器和其他工具应位于由 Microsoft Visual Studio 安装程序设置的变量 VS100COMNTOOLS 定义的位置。

只需要 VS2010 的 C++ 部分。尽量让安装程序安装到默认安装目录。安装 VS2010 后,请务必重新启动系统。系统环境变量 VS100COMNTOOLS 应该在您的环境中设置。

确保环境中也设置了 TMP 和 TEMP,并且它们指向存在的 Windows 路径,例如 C:\temp,而不是 /tmp,不是 /cygdrive/c/temp,也不是 C:/temp。C:\temp 只是一个示例,假设这个区域是用户私有的,因此默认情况下安装后,您应该在这些变量中看到一个唯一的用户路径。

2.1.4 mac

安装XCode即可

2.2 Configure

配置脚本的基本调用方式如下:

bash ./configure [options]

这将创建一个包含“配置”的输出目录,并设置一个用于构建结果的区域。这个目录通常看起来像这样:

build/linux-x64-normal-server-release

配置脚本将尝试确定您运行的系统类型以及所有必要的构建组件的位置。如果您已经安装了所有构建所需的前提条件,它应该能够找到所有组件。如果它无法自动检测到任何组件,它将退出并通知您问题所在。发生这种情况时,请参阅下面的配置选项以获取更多信息。

描述命令行
指定使用 FreeType 的 Windows 32 位构建bash bash ./configure --with-freetype=/cygdrive/c/freetype-i586 --with-target-bits=32
调试 64 位构建bash bash ./configure --enable-debug --with-target-bits=64

2.2.1 可选项

可以通过以下方式查看所有 OpenJDK 配置选项的完整详细信息:

bash ./configure --help=short

在这里插入图片描述
使用 -help 查看所有可用的配置选项。您可以生成任意数量的不同配置,例如调试版、发布版、32 位、64 位等。一些常用的配置选项包括:

选项作用
–enable-debug将调试级别设置为 fastdebug(这是 --with-debug-level=fastdebug 的简写
–with-alsa=path选择高级 Linux 音频架构 (ALSA) 的位置。在 Linux 上构建 OpenJDK 需要 ALSA 文件的版本 0.9.1 或更新版本。这些 Linux 文件通常可以从 “alsa” 或 “libasound” 开发包中获得,并且强烈建议您尝试使用所使用的特定 Linux 版本提供的软件包。
–with-boot-jdk=path选择引导 JDK
–with-boot-jdk-jvmargs=“args”提供用于运行引导 JDK 的 JVM 选项
–with-cacerts=path选择 cacerts 文件的路径。有关证书颁发机构 (CA) 的更好理解,请参阅 http://en.wikipedia.org/wiki/Certificate_Authority。名为 “cacerts” 的证书文件代表一个包含 CA 证书的系统级密钥库。在 JDK 和 JRE 二进制包中,“cacerts” 文件包含来自多个公共 CA(例如 VeriSign、Thawte 和 Baltimore)的根 CA 证书。源码中包含一个不带 CA 根证书的 cacerts 文件。正式的 JDK 构建者需要从每个公共 CA 获取许可,并将证书包含到他们自己的自定义 cacerts 文件中。如果未提供已填充的 cacerts 文件,将导致运行时证书链验证错误。默认情况下,提供一个空的 cacerts 文件,这对于大多数 JDK 开发人员来说应该是可以的。
–with-cups=path选择 CUPS 安装位置。构建 OpenJDK 在 Solaris 和 Linux 上需要通用 UNIX 打印系统 (CUPS) 头文件。Solaris 头文件可以通过安装 Solaris Software Companion CD/DVD 中的 SFWcups 软件包获得,这些文件通常会安装到 /opt/sfw/cups 目录中。CUPS 头文件可以随时从 www.cups.org 下载。
–with-cups-include=path选择 CUPS 包含目录的位置
–with-debug-level=level选择 release、fastdebug 或 slowdebug 的调试信息级别
–with-dev-kit=path选择编译器安装位置或开发者安装位置
–with-freetype=path选择要使用的 FreeType 文件。期望 FreeType 库位于 lib/ 目录下,头文件位于 include/ 目录下。需要 FreeType 2.3 或更新版本。在 Unix 系统上,所需文件可能作为您发行版的一部分提供(尽管您可能需要升级它们)。请注意,您需要包含 FreeType 库和头文件的开发版本软件包。您可以随时从 FreeType 网站下载最新版本的 FreeType。从头开始构建 FreeType 2 库也是可能的,然而在 Windows 上请参考 Windows FreeType DLL 构建说明。请注意,由于许可限制,默认情况下 FreeType 是在禁用字节码提示支持的情况下构建的。在这种情况下,文本外观和度量预计会与 Sun 的官方 JDK 构建有所不同。有关更多信息,请参见 SourceForge FreeType2 主页。
–with-import-hotspot=path选择查找先前构建的 Hotspot 二进制文件的位置,以避免重新构建 Hotspot。
–with-target-bits=arg选择 32 位或 64 位构建
–with-jvm-variants=variants选择要构建的 JVM 变种,用逗号分隔的列表,可以包括:server、client、kernel、zero 和 zeroshark。
–with-memory-size=size选择 GNU make 将认为该系统拥有的 RAM 大小。
–with-msvcr-dll=path选择要包含在 Windows 构建中的 msvcr100.dll 文件(Visual Studio 的 C/C++ 运行时库)。这通常会从 Visual Studio 2010 的 redist 目录中自动获取。
–with-num-cores=cores选择要使用的核心数量(处理器数量或 CPU 数量)。
–with-x=path选择 X11 和 xrender 文件的位置。构建 OpenJDK 在 Solaris 和 Linux 上需要 XRender 扩展头文件。Linux 头文件通常可以从 “Xrender” 开发包中获得,建议您尝试使用您所使用的特定 Linux 发行版提供的包。Solaris 的 XRender 头文件包含在较新版本 Solaris 的 SFWxwinc 包中的其他 X11 头文件中,并将安装在 /usr/X11/include/X11/extensions/Xrender.h 或 /usr/openwin/share/include/X11/extensions/Xrender.h。

2.3 make

make 工具的基本调用形式如下:

make all

这将启动构建过程,并将输出生成到包含由 configure 脚本创建的“配置”的目录中。运行 make help 以获取有关可用目标的更多信息。
以下是一些常用的 make 目标:

make目标描述
empty构建所有内容,但不包括镜像。
all构建所有内容,包括镜像。
all-conf构建所有配置。
images创建完整的 j2sdk 和 j2re 镜像。
install将生成的镜像安装到本地,通常是安装在 /usr/local 目录下。
clean删除所有由 make 生成的文件,但不删除由 configure 生成的文件。
dist-clean删除所有由 make 和 configure 生成的文件(基本上是清除配置)。
help提供一些有关使用 make 的帮助,包括一些有趣的 make 目标。

2.4 Testing

构建完成后,你应该会在输出目录中的 j2sdk-image 目录里看到生成的二进制文件和相关文件。特别是,build/*/images/j2sdk-image/bin 目录应该包含该配置的 OpenJDK 工具和实用程序的可执行文件。需要使用测试工具 jtreg,可以在 jtreg 网站找到它。可以使用以下命令运行代码库中提供的回归测试:

cd test && make PRODUCT_HOME=`pwd`/../build/*/images/j2sdk-image all

3. 可能遇到的问题

3.1 mac环境下提示缺少GCC

在这里插入图片描述
通过homebrew安装gcc,执行如下命令:

brew install  gcc

耐心等待安装完毕就可以了
在这里插入图片描述
下载完成后,通过执行如下命令来验证是否安装成功:

gcc -v

如果输出类似下图,说明安装成功

在这里插入图片描述

系列文章

1.JDK源码阅读之环境搭建

2.JDK源码阅读之目录介绍

3.jdk源码阅读之ArrayList(上)

4.jdk源码阅读之ArrayList(下)

5.jdk源码阅读之HashMap

6.jdk源码阅读之HashMap(下)

7.jdk源码阅读之ConcurrentHashMap(上)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

至真源

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值