00.编译OpenJDK-8u40的整个过程

前言

历经2天的折腾总算把OpenJDK给编译成功了,要说为啥搞这个,还得从面试提及,最近出去面试常常被问到JVM的相关东西,总感受本身之前学的太浅薄,因此回来就打算深刻学习,目标把《深刻理解Java虚拟机》这个本书要啃下来。接下来问题来了,读个这个书的人都知道这个书的第一章就是讲如何编译本身的JDK,书上的东西看着简单,自动动手另外是一回事,通过这么几天折腾体会很深入,作技术的,仍是要踏踏实实的一步步来。好高骛远是大忌。废话很少说,下面给出本身编译过程java

环境要求

系统:CentOS7linux

编译源码版本:OpenJDK-8u40git

下载地址:连接: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 密码:n1fqbootstrap

ccache版本:3.14bash

下载地址:连接:https://pan.baidu.com/s/1-qvxAMkaJS1ASSVbNZHkFA 密码:m9fjjvm

编译因此须要的安装包以及系统文件下载地址:工具

连接: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