前言
历经2天的折腾总算把OpenJDK给编译成功了,要说为啥搞这个,还得从面试说起,最近出去面试经常被问到JVM的相关东西,总感觉自己以前学的太浅薄,所以回来就打算深入学习,目标把《深入理解Java虚拟机》这个本书要啃下来。接下来问题来了,读个这个书的人都知道这个书的第一章就是讲如何编译自己的JDK,书上的东西看着简单,自动动手另外是一回事,经过这么几天折腾体会很深刻,做技术的,还是要踏踏实实的一步步来。好高骛远是大忌。废话不多说,下面给出自己编译过程
环境要求
系统:CentOS7
编译源码版本:OpenJDK-8u40
下载地址:链接:https://pan.baidu.com/s/1LRP_67uBezBqn-gfStlH-A 密码:o65r
Bootstrap JDK:Oracle JDK1.7.0_75
下载地址:链接:https://pan.baidu.com/s/1sKuXkNcnjJp-qCe5_4_qVw 密码:n1fq
ccache版本:3.14
下载地址:链接:https://pan.baidu.com/s/1-qvxAMkaJS1ASSVbNZHkFA 密码:m9fj
编译所以需要的安装包以及系统文件下载地址:
链接:https://pan.baidu.com/s/1Jb1iSSmutZKLmzjncIdRXA 密码:myk9
安装前准备
yum update yum -y install wget ###约定以上的安装包下载上传到/usr/local/src目录
安装编译环境
yum groupinstall "Development Tools" yum install libXtst-devel libXt-devel libXrender-devel yum install cups-devel yum install freetype-devel yum install alsa-lib-devel
安装ccache
##进入到/usr/local/src目录 cd /usr/local/src ##解压 tar -zxvf ccache-3.1.4.tar.gz ##安装 cd ccache-3.1.4 ##配置编译 ./configure ##编译安装,默认是安装在/usr/local/bin/ccache make && make install
安装Oracle JDK1.7.0_75为Bootstrap JDK
##进入到/usr/local/src cd /usr/local/src ##创建bootstrap jdk安装的目录 mkdir /usr/local/java ##解压jdk-7u75-linux-x64.tar.gz tar -zxvf jdk-7u75-linux-x64.tar.gz -C /usr/local/java ##配置环境变量 vi /etc/profile ##在最后面加上jdk环境变量 export JAVA_HOME=/usr/local/java/jdk1.7.0_75 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH ###保存立即生效 source /etc/profile
开始编译OpenJDK
##进入/usr/local/src cd /usr/local/src ##解压openjdk源码 tar -zxvf openjdk-8u40-src-b25-10_feb_2015.tar.gz -C /usr/local ##进入解压目录 cd /usr/local/openjdk ##开始编译配置 bash ./configure --with-target-bits=64 --with-boot-jdk=/usr/local/java/jdk1.7.0_75/ --with-debug-level=slowdebug --enable-debug-symbols ZIP_DEBUGINFO_FILES=0 ##开始编译 make all ZIP_DEBUGINFO_FILES=0 !!!!如果运气好,就等着编译结果吧
以上的参数简单作一些说明: –with-target-bits=64 :指定生成64位jdk; –with-boot-jdk=/usr/local/java/jdk1.7.0_75/:启动jdk的路径; –with-debug-level=slowdebug:编译时debug的级别,有release, fastdebug, slowdebug 三种级别; –enable-debug-symbols ZIP_DEBUGINFO_FILES=0:生成调试的符号信息,并且不压缩;
若在configure过程中提示安装工具,则在安装完工具后执行make clean进行清理方可再次configure,否则会config不成功。
编译结果展示图
编译成功后进入到/usr/local/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin目录执行 ./java -version 查看jdk版本
cd /usr/local/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin ./java -version
接下来我们可以修改环境变量为我们现在自己编译的jdk
vi /etc/profile #export JAVA_HOME=/usr/local/java/jdk1.7.0_75 export JAVA_HOME=/usr/local/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
##环境变量生效 source /etc/profile ##测试现在的jdk版本信息 java -version
到此编译自己的JDK就算顺利完成了,昨晚为这个还熬夜到凌晨三点,想着放弃,但是想想都投入了这么长时间放弃可惜,作为一个java开发人员不明白jvm,永远不算一个合格的java程序员。所以这个信念让我坚持有了第一次这么认真。就从这个坎作为我的技术深入研究的起点吧!加油,爱生活,更爱程序.....
知识积累链接:https://gitee.com/shxjinchao/java_knowledge_base
来源:oschina
链接:https://my.oschina.net/u/2614774/blog/2208008