《深入理解JAVA虚拟机》-自己动手编译JDK

时间:2020-01-07
本文章向大家介绍《深入理解JAVA虚拟机》-自己动手编译JDK,主要包括《深入理解JAVA虚拟机》-自己动手编译JDK使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

环境

Ubuntu12.4-http://mirrors.163.com/ubuntu-releases/12.04/ --需要安装纯英文版,避免中文引起不必要的麻烦
OpenJDK7-https://download.java.net/openjdk/jdk7/

tips:由于OpenJDK部分代码使用java语言编写,所以需要一个编译好的jdk来编译(。。。。禁止套娃)
BootstrapJDK-jdk-7u80-linux-x64.tar.gz(可以到Oracle下载)

这里使用Oracle VM VirtualBox作为虚拟机演示

安装依赖

1.安装库
sudo apt-get install build-essential gawk m4 libasound2-dev libcups2-dev libxrender-dev xorg-dev xutils-dev x11proto-print-dev binutils libmotif3 libmotif-dev ant libxt-dev libxtst-dev
如果一次安装不成功,请多试几次,或者更换源
2.解压OpenJDK和BootstrapJDK到相应目录下
OpenJDK:/home/pumpkin/j7/openjdk
BootstrapJDK:/home/pumpkin/j7/jdk1.7

因为jdk7年代已久,需要对openjdk的文件做些许修改:
openjdk/jdk/src/share/classes/java/util/CurrencyData.properties文件,将其中所有的10年前日期改为10年以内的,否则会报错:time is more than 10 years from present

创建make脚本

在OpenJDK目录内创建此make.sh脚本,修改其中的两个路径 ,并赋予执行权限

#语言选项,这个必须设置,否则编译好后会出现一个HashTable的NPE错
export LANG=C

#Bootstrap JDK的安装路径。必须设置。 
export ALT_BOOTDIR=/home/pumpkin/j7/jdk1.7

#允许自动下载依赖
export ALLOW_DOWNLOADS=true

#并行编译的线程数,设置为和CPU内核数量一致即可
export HOTSPOT_BUILD_JOBS=2
export ALT_PARALLEL_COMPILE_JOBS=2

#比较本次build出来的映像与先前版本的差异。这个对我们来说没有意义,必须设置为false,否则sanity检查会报缺少先前版本JDK的映像。如果有设置dev或者DEV_ONLY=true的话这个不显式设置也行。 
export SKIP_COMPARE_IMAGES=true

#使用预编译头文件,不加这个编译会更慢一些
export USE_PRECOMPILED_HEADER=true

#要编译的内容
export BUILD_LANGTOOLS=true 
#export BUILD_JAXP=false
#export BUILD_JAXWS=false 
#export BUILD_CORBA=false
export BUILD_HOTSPOT=true 
export BUILD_JDK=true

#要编译的版本
#export SKIP_DEBUG_BUILD=false
#export SKIP_FASTDEBUG_BUILD=true
#export DEBUG_NAME=debug

#把它设置为false可以避开javaws和浏览器Java插件之类的部分的build。 
BUILD_DEPLOY=false

#把它设置为false就不会build出安装包。因为安装包里有些奇怪的依赖,但即便不build出它也已经能得到完整的JDK映像,所以还是别build它好了。
BUILD_INSTALL=false

#编译结果所存放的路径
export ALT_OUTPUTDIR=/home/pumpkin/j7/pumpkinJDK7

#这两个环境变量必须去掉,不然会有很诡异的事情发生(我没有具体查过这些“”诡异的事情”,Makefile脚本检查到有这2个变量就会提示警告“)
unset JAVA_HOME
unset CLASSPATH

make 2>&1 | tee $ALT_OUTPUTDIR/build.log

运行make.sh

openjdk#sh make.sh
我在虚拟机中编译,大约需要23min

编译好的java -version 虚拟机信息中心会带有用户信息

原文地址:https://www.cnblogs.com/dyeed/p/12124122.html