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

编译JDK1.7的更多相关文章

  1. maven 添加支持编译jdk1.7

     1.在<profiles>元素内增加如下内容   <profile>     <id>jdk17</id>     <activation> ...

  2. IntelliJ IDEA 指定Java编译版本

    在IntelliJ IDEA 15中使用Maven时,IDEA将默认的编译版本.源码版本设置为jdk5.编译项目的时候出现警告:”Warning:Java: 源值1.5已过时, 将在未来所有发行版中删 ...

  3. AndroidProjects个人项目归纳

    AndroidProjects 个人总结归纳-目录大纲 Data Binding框架MVVM BaseView CollapseView 更新中... 项目地址:https://github.com/ ...

  4. IntelliJ IDEA中Maven项目的默认JDK版本

    在IntelliJ IDEA 15中使用Maven时,IDEA将默认的编译版本.源码版本设置为jdk5.编译项目的时候出现警告:"Warning:Java: 源值1.5已过时, 将在未来所有 ...

  5. Java 8 中 CAS 的增强

    几天前,我偶然地将之前写的用来测试AtomicInteger和synchronized的自增性能的代码跑了一下,意外地发现AtomicInteger的性能比synchronized更好了,经过一番原因 ...

  6. idea中maven中jdk版本的选择(转)

    转自:https://www.cnblogs.com/joshul/p/6222398.html IntelliJ IDEA中Maven项目的默认JDK版本   在IntelliJ IDEA 15中使 ...

  7. Java内部类引用外部类中的局部变量为何必须是final问题解析

    今天编写一个多线程程序,发现在方法内定义内部类时,如果内部类调用了方法中的变量,那么该变量必须申明为final类型,百思不得其解,后来想到应该是生命周期的原因,因为方法内定义的变量是局部变量,离开该方 ...

  8. idea搭建maven项目 【转发】

    为了创建maven项目可是花了我时间了,网上的教程跟我的实际情况不符合,尤其是facets .artifacts 那块.幸亏找到这篇文章没解决了我的问题,他的描述跟我的情况一模一样.这篇文章竟然来自百 ...

  9. Cglib invoke为什么会死循环?

    目录 Cglib invoke为什么会死循环? 动态代理子类的java文件 动态代理子类实例化过程 动态代理类调用过程 动态代理之MethodProxy.invokeSuper Cglib invok ...

随机推荐

  1. Monitoring SSD Performance::www.brentozar.com

    https://www.brentozar.com/archive/2013/05/monitoring-ssd-performance/ May 16, 2013Jeremiah PeschkaSQ ...

  2. 解决Eclipse建立Maven项目后无src/main/java资源文件夹的办法

    建立好一个Maven项目后,如果Java Resources资源文件下没有src/main/java文件夹,并且在手动创建这个文件时提示“已存在文件”.这说明,在这个项目配置中已经有了src/main ...

  3. 如何在windows下的Python开发工具IDLE里安装其他模块

    以安装Httplib2模块为例 1 下载模块 到 “https://code.google.com/p/httplib2/” 下载一款适合你的压缩包“httplib2-0.4.0.zip” 2 解压下 ...

  4. Enyim Memached 客户端 执行GET 总是返回NULL

    排查: 1. ping 远程Linux 服务器 正常 2.11211 端口正常 3. ps aux | grep memcached 显示正常 4. 使用另外一个客户端 memcachedClient ...

  5. SqlServer数据库1433端口问题1

    在本地使用telnet ip  1433 命令测试数据库1433端口是否打开,总是提示错误,根据网上查找资料总结了如下两点思路供参考,欢迎指正! (1)第一种情况可能是"Telnet客户端& ...

  6. 阻止jQuery事件冒泡

    Query对DOM的事件触发具有冒泡特性.有时利用这一特性可以减少重复代码,但有时候我们又不希望事件冒泡.这个时候就要阻止 jQuery.Event冒泡. 在jQuery.Event 的文档 中的开头 ...

  7. 转: APK签名校验绕过

    转: http://drops.wooyun.org/mobile/4296 APK签名校验绕过 3xpl0it · 2014/12/11 10:41 0x01 Android签名机制 将APK重命名 ...

  8. Android 自定义数字加减器

    该自定义View主要是实现一款效果不错的数字加减器的功能的,但是也可以自定义选择器的外观颜色等. 1.自定义View的布局(add_sub_view.xml) <?xml version=&qu ...

  9. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)如何在TwinCAT Scope中做变量监控

    为了更好的监控变量,可以打开ScopeView即变量监控器   添加一个Scope View,然后右击添加一个Channel   我们在之前登录的时候可以选择Run-Time的端口(默认是801)   ...

  10. Win7如何设置标准账号无法访问我的D盘

    1 右击对应的盘符,选择属性 2 设置对应的权限,比如是否可读,是否可写 3 之后再用这种用户登录就可以知道相应的权限了