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

最新文章

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

热门文章

  1. CSS揭秘之多重边框&连续的图像边框
  2. node.js+mysql把数据显示到前端简单实例
  3. brew 安装PHP的配置文件所在位置
  4. meteor学习-- #一 安装meteor快速使用
  5. [Android Memory] 内存分析工具 MAT 的使用
  6. iOS:触摸事件和手势识别的介绍
  7. 利用PMKID破解PSK的实际测试与影响评估
  8. 《jQuery基础》总结
  9. java源码阅读Observable(观察者模式)
  10. flex 布局示例