想要一探JDK内部的实现机制,最便捷的路径之一就是本身编译一套JDK。java
从http://openjdk.java.net/下载源码,如 openjdk-6-src-b27-26_oct_2012.tar.gzlinux
解压以后的目录结构:jvm
Ubuntu 12.04,64位ui
在openjdk根目录下面建立build.sh文件,内容为编译的设置和编译命令.net
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
在编译过程当中有不少错误,只能说一步步解决。3d
下面列举我在编译过程当中遇到的问题:xml
1. You Seem to not have installed ALSA 0.9.1 or higherblog
(1)清除系统原有的alsa模块rem
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
编译成功的结果:
编译的输出:
验证:
深刻理解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