Java 虚拟机学习笔记(一)macOS 10.12 编译 JDK9

本贴最后更新于 2621 天前,其中的信息可能已经斗转星移

为了深入了解 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 的知识了。

  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...