最近开始看《深刻理解Java虚拟机》这一本书,这本书出版的时候Oracle尚未推出JDK8,可是做者在1.5章节中对JDK发展的预测,仍是很准确的,就像他函数式编程,模块化等,当时看到这里的时候就挺佩服做者的高瞻远瞩的,这几点基本上都预测到了,看到这里也让我对这本书有了更多的兴趣。html
第一章的最后就是本身动手编译OpenJDK,JDK7仍是比较久远了,直接来JDK8吧。java
介绍一下环境linux
由于是头一次编译openjdk,因此选择本身的服务器做为环境。以前我在这台服务器上已经安装过了JDK8,正好就能够用来作个人BootStrap jdk了。(linux安装jdk8就不介绍了。)c++
BootStrap JDK是openjdk的执行jdk,由于openjdk是用java写的,java须要一个环境来运行。编程
以前使用centos
hg clone hg.openjdk.java.net/jdk8u/jdk8u jdk8u服务器
这条命令去下载openjdk,可是后来查了一下 openjdk的目录结构,发现我下的这个跟网上的不同,因而又换了一个。地址是:app
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复制代码