为了深入了解 Java 的运行机制,了解久负盛名的 JVM,笔者决定开始学习 JVM 相关知识。
参考书为《深入理解 Java 虚拟机(第 2 版)》(以下简称为《深入》)
零、为什么是 JDK9?
《深入》中,作者使用的是 JDK6 来编译 JDK7,环境使用的是 OSX 10.8,对 Xcode 的要求为 4.5.2 及以上。笔者从 JDK7 尝试到 JDK8,皆因为 Xcode 版本的原因导致编译失败。简而言之就是:虽然 JDK 源码声称要求 4.5 及以上,但我的 Xcode9 不能被调用,同时安装的 Xcode4 在 10.12 上也不能运行。直到换了 JDK9,configure,build 都没再报什么令人头炸的错,顺利完成。
一、获取 JDK9
1.安装 Homebrew
macOS 一直没有自己官方的软件包管理器,所以要安装 Homebrew
来填补这个空缺。
安装方式https://brew.sh/
之后运行 brew -v
能查看到版本信息即安装完成。
2.安装 Mercurial
Mercurial 是一个类似于 Git 的版本控制工具。OpenJDK 的源码便是存放于 Mercurial 的仓库中。
安装命令为 brew install mercurial
之后运行 hg --version
验证安装。
3.获取 JDK9 源代码
Repository 的地址为 http://hg.openjdk.java.net,在里面我们可以看到从 JDK6 到 JDK10 的 JDK 源码还有一堆其他的东西。
获取过程:
hg clone http://hg.openjdk.java.net/jdk9/jdk9
cd jdk9
chmod +x get_source.sh
./get_source.sh
因网络下载能力相异,所以这一步有可能需要较长时间的等待。
二、构建 Build
在 common/doc/building.html
中详细介绍了 build 相关的环境要求、参数设置、可能的问题及解决方案和对整个编译系统的介绍。文档也有 Markdown 格式的,在同一目录下。
简单摘录一下在 MacOS 下的环境需求。
- Apple Xcode 6.3 (using clang 6.1.0)
- JDK 8 on macOS (as Boot JDK)
- FreeType (at least version 2.3)
其他再因为机器相异而导致的环境缺失,在运行 configure 的结果中应该能够得出缺少什么,再去请教搜索引擎,应该就能解决。
1.配置 Configure
幸运的是,作为 10.12 和 JDK9 的受益者,笔者似乎并没有进行什么过多的配置,并没有像《深入》中编译 JDK7 所需要写的长长的环境变量设置脚本。
那么多的参数,笔者只用到了一个 --disable-warnings-as-errors
以去除一些烦人且不知如何修改的 Error。
运行 configure --disable-warnings-as-errors
之后,configure 会打印出一个详细的配置清单。如果没问题的话,此时,在 ./build
文件夹中应该出现了一个代表这次配置的文件夹。这个文件夹也是此后编译结果的默认所在之处。
2.编译 make
很简单一条指令 make
。
接下来,便是疯狂的编译过程,终端窗口会被一堆杂乱的代码不断刷屏,时不时还会有个 WARN 蹦出来吓唬人。笔者的电脑时 i7-6700K,开 8 核编译,并没有花多长时间便编译完成。
编译结果位于 build/macosx-x86_64-normal-server-release/
下。
可以通过 jdk9/build/macosx-x86_64-normal-server-release/jdk/bin/
下的 ./java -version
命令查看编译结果的版本信息。
笔者的如下:
$ ./java -verison
openjdk version "9-internal"
OpenJDK Runtime Environment (build 9-internal+0-adhoc.kurosei.jdk9)
OpenJDK 64-Bit Server VM (build 9-internal+0-adhoc.kurosei.jdk9, mixed mode)
如果上述信息正确显示(具体细节可能有所不同),则应该可以证明 JDK9 的编译是成功的了,接下来便可以继续学习关于 JVM 的知识了。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于