携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第9天,点击查看活动详情
为了更深入的学习多线程,编译一个JDK是必要的,是自己编译的JDK噢,不是从官网下的,本作者也是理论和实践相结合,为了给大家带来更好的文章,亲身去编译了一下JDK,本作者用时2天零2个小时,当然,你们看我的文章之后时间可能会更短,这也是我写作的目的,分享与成长。
准备工作
1、openjdk的源码包
工欲善其事必先利其器,干任何事情都要准备,你需要准备openjdk的源码包,源码包的获取方式有两种:一种方式是直接通过官网获取,另一种就是通过镜像来获取吗,这个镜像是真大,拉取之后呢,就切换到对应的tag版本就可以了。
安装mercurial
yum -y install mercurial ##拉取openjdk8的源码,这种方式拉取比较慢(可以选择下面第二种方案:从github上拉取) hg clone hg.openjdk.java.net/jdk8/jdk8 openjdk8
拉取镜像
git clone github.com/openjdk/jdk ##拉取后切换分支 cd jdk ##tag 标记 jdk8-b120,github上8版本最新的tag git checkout jdk8-b120,github上8版本最新的tag
bootjdk
你还需要一个引导jdk,顾名思义就是引导编译的jdk,你就去官网下载一个普通的jdk就可以啦,切记引导jdk要比要编译的openjdk低一个版本。
工具集
- yum install -y zip
- yum groupinstall -y "Development Tools"
- yum install -y libbXtst-devel libXt-devel libXrender-devel
- yum install -y cups-devel
- yum install -y alsa-lib-devel
- yum install -y freetype-devel
参数设置
准备工作做好以后,需要进行参数设置,你需要进入下载的源码包目录里找到configure文件,这是我们操作的灵魂,然后给其增加权限,设置参数,执行以下命令:
- export LANG=C
- export USE_PRECOMPILED_HEADER=true
- unset JAVA_HOME
- unset CLASSPATH
- unset JAVA_TOOL_OPTIONS
- bash ./configure --with-target-bits=64 --with-boot-jdk=/usr/local/jdk7/jdk1.7.0_76 --(这里换成你自己下载的引导jdk的目录)
- bash ./configure --with-debug-level=slowdebug --enable-debug-symbols ZIP_DEBUGINFO_FILES=0
看到下面的这种就可以往下进行编译了,如果有错误就解决错误。
比如这种就是一个错误:
这个是我用yum安装的jdk,可能网速不好,所以导致某些包没有下载完全。
编译
以上都没有问题就开始编译: make all CONF=linux-x86_64-normal-server-slowdebug ZIP_DEBUGINFO_FILES=0
然后你就看到cpu疯转,有一些报错百度都可以找得到,如下的这样:
着实是踩了不少坑,所幸编译成功了。
当你看到这样的界面,证明编译成功:
好啦,到这一步,你加个环境变量,这个jdk就能用了。