编译JDK1.7
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
最新文章
- [翻译]当分发数据库增长到25G时如何解决
- html/css基础篇——DOM中关于脱离文档流的几种情况分析
- CentOS VirtualBox启动虚拟及报错:VirtualBox error: Kernel driver not installed (rc=1908)
- mobileTech
- 委托,C#本身的委托(Action Func)
- Android little error records
- Linux网络相关命令小结
- JQuery字符串替换replace方法
- mysql实现随机查询
- C#_传单小子
- 12C cdb/pdb 配置监听
- 关于Linux的虚拟内存管理
- [Python Study Notes]CS架构远程访问获取信息--SERVER端
- pig 的chararry类型不能用比较运算符comparison operator
- Java遍历List集合的4种方式
- 再次精读《javascript高级程序设计第3版》学习笔记(1)
- libvirt启动报错Failed to start Virtualization daemon
- Java并发编程(十二)Callable、Future和FutureTask
- Leetcode 7.反转整数 By Python
- 接口,定义接口的关键字是 interface 实现接口关键字是 implements