最近开始看《深入理解Java虚拟机》这一本书,这本书出版的时候Oracle还没有推出JDK8,但是作者在1.5章节中对JDK发展的预测,还是很准确的,就像他函数式编程,模块化等,当时看到这里的时候就挺佩服作者的高瞻远瞩的,这几点基本上都预测到了,看到这里也让我对这本书有了更多的兴趣。
第一章的最后就是自己动手编译OpenJDK,JDK7还是比较久远了,直接来JDK8吧。
介绍一下环境
因为是头一次编译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复制代码