编译OpenJDK8

最近在读<深入理解Java虚拟机>,看完第一部分想着自己动手编译一套JDK,毕竟想要深入了解JDK内部实现,跟踪调试JDK源码时最便捷的路径(不过不一定能看懂,哈哈)。闲话不多说,正文开始。

1. 获取OpenJDK源码

我使用的OpenJDK版本:openjdk-8u40-src-b25-10_feb_2015
从官网下载:http://jdk.java.net/java-se-ri/8
从我提供的百度云下载:https://pan.baidu.com/s/1NSm-Pl6KexoCfb7TrDp72Q 提取码:74fe

2. 系统需求

我使用的是windos10自带的Hyper-V虚拟机(VMware,virtualbox都可以,但是不能和Hyper-V并存),安装一个ubuntu-16.04.6版本(第一次安装了18.04.2版本,但是编译OpenJDK失败了)。

虚拟机分配的资源如下:
cpu:2
内存:4G(第一次分配了2G,但是编译后期报内存溢出了)
硬盘空间:因为虚拟机中是动态增长的,所以没有设置固定。

从官网下载:https://www.ubuntu.com/download/alternative-downloads
从我提供的百度云下载:https://pan.baidu.com/s/196F4TflQ2rI40xdzPYnBZA 提取码:t9ry

3. 构建编译环境

  • 因为OpenJDK的各个组成部分有的是使用C++编译,有的是使用Java自身实现的,所以编译这些Java代码需要一个可用的JDK,官方称这个JDK为“Bootstrap JDK”,所以我使用的版本为:jdk-7u80-linux-x64
    从官网下载(需要注册账号):https://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html
    从我提供的百度云下载:https://pan.baidu.com/s/1zwBSOzK4Yyh5IOiEiUNa1Q 提取码:dxky
  • OpenJDK源码中使用到Ant脚本,我使用的版本为:apache-ant-1.9.14-bin
    从官网下载:https://ant.apache.org/bindownload.cgi
    从我提供的百度云下载:链接:https://pan.baidu.com/s/1VxQAEN5ksUXllCjl9a8D8A 提取码:2dvo
  • 配置Bootstrap JDK和Ant环境
sudo vi /etc/profile
#打开文件后附加一下内容,路径自行替换。
export ANT_HOME=/home/jiazhifeng/workspace/apache-ant-1.9.14
export JAVA_HOME=/home/jiazhifeng/workspace/jdk1.7.0_80
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH
#退出文件后,运行下面命令
source /etc/profile
  • 下载依赖包
sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev libcups2-dev libfreetype6-dev libasound2-dev ccache

4. 开始编译

  • 解压OpenJDK源码并进入目录
unzip openjdk-8u40-src-b25-10_feb_2015.zip
cd openjdk/
  • 运行命令
sudo bash ./configure --with-target-bits=64 --with-boot-jdk=/home/jiazhifeng/workspace/jdk1.7.0_80/ --with-debug-level=slowdebug --enable-debug-symbols ZIP_DEBUGINFO_FILES=0
sudo make all DISABLE_HOTSPOT_OS_VERSION_CHECK=OK ZIP_DEBUGINFO_FILES=0

说明下第一条命令configure用到的参数作用:
–with-target-bits=64 :指定生成64位jdk;
–with-boot-jdk=/usr/java/jdk1.7.0_80/:启动jdk的路径;
–with-debug-level=slowdebug:编译时debug的级别,有release, fastdebug, slowdebug 三种级别;
–enable-debug-symbols ZIP_DEBUGINFO_FILES=0:生成调试的符号信息,并且不压缩;


第一条命令执行完会输出以下内容:
编译OpenJDK8_第1张图片
第二条命令执行完会输出以下内容(编译会花费15分钟左右时间):
编译OpenJDK8_第2张图片

5. 验证

  • 进入下面目录并运行命令
cd build/linux-x86_64-normal-server-slowdebug/images/j2sdk-image/bin/
./java -version

输出:
验证Java版本

你可能感兴趣的:(Java)