1. 背景
想要一探JDK内部的实现机制,最便捷的路径之一就是自己编译一套JDK。
2. 获取JDK源码
从http://openjdk.java.net/下载源码,如 openjdk-6-src-b27-26_oct_2012.tar.gz
解压之后的目录结构:
3. 编译环境
3.1 系统环境
Ubuntu 12.04,64位
3.2 准备编译脚本
在openjdk根目录下面创建build.sh文件,内容为编译的设置和编译命令
build.sh
设置语言 export LANG=C 设置Bootstrap JDK export ALT_BOOTDIR=/sdf/jvm/openjdk/jdk1.7.0_72 允许自动下载依赖 export ALLOW_DOWNLOADS=true 并行编译的线程数,设置为何CPU内核数量一致即可 export HOTSPOT_BUILD_JOBS=12 export ALT_PARALLEL_COMPILE_JOBS=12 export SKIP_COMPARE_IMAGES=true 使用预编译头文件,不加这个编译会更慢一些 export USER_PRECOMPILED_HEADER=true 设置要编译的内容 export BUILD_LANGTOOLS=true export BUILD_HOTSPOT=true export BUILD_JDK=true BUILD_DEPLOY=false BUILD_INSTALL=false 编译结果所存放的路径 export ALT_OUTPUTDIR=/sdf/jvm/openjdk/build unset JAVA_HOME unset CLASSPATH unset LD_LIBRARY_PATH 开始编译 make 2>&1 | tee $ALT_OUTPUTDIR/build.log
3.3 执行sh build.sh编译
在编译过程中有很多错误,只能说一步步解决。
下面列举我在编译过程中遇到的问题:
1. You Seem to not have installed ALSA 0.9.1 or higher
(1)清除系统原有的alsa模块
sudo apt-get remove linux-sound-base alsa-base alsa-utils
(2)重新安装alsa模块
sudo apt-get install xmlto libasound2-dev
sudo apt-get install linux-sound-base alsa-base alsa-utils
这是一类问题,基本就是缺少依赖,只要成功安装就可以了
具体参考:
https://blog.csdn.net/qq_29729577/article/details/53706551
http://cduym.iteye.com/blog/1892416
http://caoxudong818.iteye.com/blog/1748869
2.
解决方案:使用jdk1.7.0_72作为ALT_BOOTDIR
3.
https://blog.csdn.net/abountwinter/article/details/52369507
4. 编译成功
编译成功的结果:
编译的输出:
验证:
x.参考资料
深入理解Java虚拟机:JVM高级特性与最佳实践
https://blog.csdn.net/qq_29729577/article/details/53706551
http://cduym.iteye.com/blog/1892416
https://blog.csdn.net/abountwinter/article/details/52369507
http://caoxudong818.iteye.com/blog/1748869