文章目录
一、背景
平台:macOs Sierra 10.12.5
BootJDK: Sun jdk14.
OpenJDK:jdk-15+20
xcode:8.3.3
最近看了JVM的原理,特别想知道JVM的底层实现是什么的,只有研究的更深入,才能走的更远,遂决定打开jdk这扇神秘的大门。
二、 下载OpenJDK源码
openJdk从2018年10月发起向github进行代码托管的计划,目前github维护的仓库是:https://github.com/unofficial-openjdk/openjdk,
当然还有OpenJdk社区自身的版本库:
【Master和DEV】http://hg.openjdk.java.net/jdk/jdk/file/9b35dd9ce70a
目前github上已经更新到jdk-15+21,由于从github下载巨慢,所以试了很多方法都无法加速,只好从国内的gitee平台入手,目前有一个仓库维护到:jdk-15+20,大家可以从下面这个地址进行clone。我是从以下仓库进行clone的。
git clone https://gitee.com/liweiwww/jdk.git
三、编译jdk的环境准备
编译jdk需要准备一些基础环境,比如编译OpenJDK的BootJDK版本、安装freetype、autoconf、ccache。接下来将详细讲解各个部分的安装过程
编译的命令如下:
bash configure --with-debug-level=slowdebug --with-jvm-variants=server --enable-ccache --with-freetype=bundled --with-boot-jdk=/Library/Java/JavaVirtualMachines/jdk-14.0.1.jdk/Contents/Home --disable-warnings-as-errors
3.1 Bootstrap JDK 准备
编译OpenJdk需要基础的jdk进行支撑,版本不应该和待编译的jdk差别过大,否则编译时会报错。报错信息如下:
configure: Found potential Boot JDK using well-known locations (in /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk)
configure: Potential Boot JDK found at /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home is incorrect JDK version (java version "1.8.0_144"); ignoring
configure: (Your Boot JDK version must be one of: 14 15)
configure: Could not find a valid Boot JDK. OpenJDK distributions are available at http://jdk.java.net/.
configure: This might be fixed by explicitly setting --with-boot-jdk
configure: error: Cannot continue
假设要编译大版本号为N的JDK,我们还要另外准备一个大版本号至少为N-1的、已经编译好的JDK,这是因为OpenJDK由多个部分(HotSpot、JDK类库、JAXWS、JAXP……)构成,其中一部分(HotSpot)代码使用C、C++编写,而更多的代码则是使用Java语言来实现,因此编译这些Java代码就需要用到另一个编译期可用的JDK,官方称这个JDK为“BootstrapJDK”。编译OpenJDK 15时,Bootstrap JDK必须使用JDK 14及之后的版本。
我机器上的java版本是:
bogon:openJdk15_20 bingsanlang$ java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM