对于希望深入了解 JVM 的结构,工作原理以及调优的工程师来说,拥有自己的,从源码编译的 JVM 是非常必要的。本文描述如何在 Ubuntu 系统环境中编译 Open JDK 8。
设置环境
因为 JDK 主要使用 c++ 语言进行编写的,所以我们需要首先安装 c++ 开发环境
1 | sudo apt install build-essential |
安装 openjdk 的依赖包
1 | sudo apt-get install -y \ |
在 Open JDK 8中,有部分代码是用 Java 语言写成的,因此要完成编译,还需要安装一个: jdk。 在 open jdk 的源代码中把这个 JDK 叫做: Boot JDK。 这里我们选择安装 open jdk 7 的官方编译版本。
1 | sudo apt install openjdk-7-jdk |
下载源代码
1 | wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-src-b04-14_jan_2020.zip |
下载以后,使用 unzip 命令简单的解压即可。
1 | unzip openjdk-8u41-src-b04-14_jan_2020.zip |
配置并编译
进入解压以后的目录(名为: openjdk),然后检查环境是否已经准备好并配置相关路径, 这个可以通过 CMake 的 Configure 完成,执行下面的命令:
1 | bash ./configure --with-debug-level=slowdebug --with-target-bits=64 --with-freetype-include=/usr/include/freetype2 --with-freetype-lib=/usr/lib/x86_64-linux-gnu |
系统会执行很多检查并生成相应的配置文件,如果没有错误,系统将显示类似下面的信息:
1 | ...... |
然后,就可以执行编译命令进行编译, 执行:
1 | make images |
经过一段时间的编译后,如果没有出错,系统会显示如下的信息:
1 | ....... |
查看编译结果
进入 openjdk 目录下的 build/linux-x86_64-normal-server-slowdebug/images/j2sdk-image 目录,就可以看到编译生产的JDK。
1 | -r--r--r-- 1 root root 2114 Apr 9 09:53 ADDITIONAL_LICENSE_INFO |
进入 bin 目录,可以看到生成的可执行文件和工具,执行:
1 | ./java -version |
系统显示:
1 | openjdk version "1.8.0-internal-debug" |
说明我们编译的JDK已经可以运行了。