最近开始看《深入理解Java虚拟机》这一本书,这本书出版的时候Oracle还没有推出JDK8,但是作者在1.5章节中对JDK发展的预测,还是很准确的,就像他函数式编程,模块化等,当时看到这里的时候就挺佩服作者的高瞻远瞩的,这几点基本上都预测到了,看到这里也让我对这本书有了更多的兴趣。
第一章的最后就是自己动手编译OpenJDK,JDK7还是比较久远了,直接来JDK8吧。
介绍一下环境
- 系统是 centos7
- Bootstrap JDK 1.8
- OpenJDK 1.8
因为是头一次编译openjdk,所以选择自己的服务器作为环境。之前我在这台服务器上已经安装过了JDK8,正好就可以用来做我的BootStrap jdk了。(linux安装jdk8就不介绍了。)
BootStrap JDK是openjdk的执行jdk,因为openjdk是用java写的,java需要一个环境来运行。
之前使用
hg clone hg.openjdk.java.net/jdk8u/jdk8u jdk8u
这条命令去下载openjdk,但是后来查了一下 openjdk的目录结构,发现我下的这个跟网上的不一样,于是又换了一个。地址是:
pan.baidu.com/s/1dKrYOlx6… 密码: r653
正确的目录结构如下图:
那么下面去安装所需要的东西。
安装alsa包
yum install alsa-lib-devel
安装cups-devel
yum install cups-devel
安装X相关的库
yum install libX* yum install xrender
安装g++
yum install gcc gcc-c++
安装freetype
yum install freetype
安装ant
yum install ant yum install ccache
安装好后设置环境变量
export JAVA_HOME=/usr/local/java/jdk1.8.0_161
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
export LANG=C
unset JAVA_HOME
unset CLASSPATH
export ALT_BOOTDIR=/usr/local/java/jdk1.8.0_161
export ANT_HOME=/usr/bin/ant
export ALLOW_DOWNLOADS=true
export USE_PRECOMPILED_HEADER=true
export ARCH_DATA_MODEL=64
export HOTSPOT_BUILD_JOB=6
export ALT_PARALLEL_COMPILE_JOBS=6
export SKIP_DEBUG_BUILD=false
export SKIP_FASTDEBUG_BUILD=true
export DEBUG_NAME=debug
这是我自己的环境变量。
然后执行configure文件
chmod +x configure ./configure
接着编译
make
第一次编译的时候是用了hg下来的包,怎么编译都不对,到最后都是报错。于是乎换了上面链接里的jdk,第一次编译也是有问题,但是第二次就好了。附图如下。 evernotecid://C6FAA89E-4A5B-44D0-A821-BA0101E2FCEC/appyinxiangcom/11444250/ENResource/p176
那么怎么看是真的编译好了呢? 用java -version 这个命令,并且跟sun jdk对比一下就知道了。 sun jdk: evernotecid://C6FAA89E-4A5B-44D0-A821-BA0101E2FCEC/appyinxiangcom/11444250/ENResource/p174
open jdk: evernotecid://C6FAA89E-4A5B-44D0-A821-BA0101E2FCEC/appyinxiangcom/11444250/ENResource/p175
openJDK到这里就编译好了,它的好处就是可以查看全部的源码,甚至可以添加断点去运行,更方便了我们研究JVM原理。
参考:
https://www.cnblogs.com/mr-long/p/5841604.html
https://www.jianshu.com/p/5db1131b3038