编译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
编译JDK1.7的更多相关文章
- maven 添加支持编译jdk1.7
1.在<profiles>元素内增加如下内容 <profile> <id>jdk17</id> <activation> ...
- IntelliJ IDEA 指定Java编译版本
在IntelliJ IDEA 15中使用Maven时,IDEA将默认的编译版本.源码版本设置为jdk5.编译项目的时候出现警告:”Warning:Java: 源值1.5已过时, 将在未来所有发行版中删 ...
- AndroidProjects个人项目归纳
AndroidProjects 个人总结归纳-目录大纲 Data Binding框架MVVM BaseView CollapseView 更新中... 项目地址:https://github.com/ ...
- IntelliJ IDEA中Maven项目的默认JDK版本
在IntelliJ IDEA 15中使用Maven时,IDEA将默认的编译版本.源码版本设置为jdk5.编译项目的时候出现警告:"Warning:Java: 源值1.5已过时, 将在未来所有 ...
- Java 8 中 CAS 的增强
几天前,我偶然地将之前写的用来测试AtomicInteger和synchronized的自增性能的代码跑了一下,意外地发现AtomicInteger的性能比synchronized更好了,经过一番原因 ...
- idea中maven中jdk版本的选择(转)
转自:https://www.cnblogs.com/joshul/p/6222398.html IntelliJ IDEA中Maven项目的默认JDK版本 在IntelliJ IDEA 15中使 ...
- Java内部类引用外部类中的局部变量为何必须是final问题解析
今天编写一个多线程程序,发现在方法内定义内部类时,如果内部类调用了方法中的变量,那么该变量必须申明为final类型,百思不得其解,后来想到应该是生命周期的原因,因为方法内定义的变量是局部变量,离开该方 ...
- idea搭建maven项目 【转发】
为了创建maven项目可是花了我时间了,网上的教程跟我的实际情况不符合,尤其是facets .artifacts 那块.幸亏找到这篇文章没解决了我的问题,他的描述跟我的情况一模一样.这篇文章竟然来自百 ...
- Cglib invoke为什么会死循环?
目录 Cglib invoke为什么会死循环? 动态代理子类的java文件 动态代理子类实例化过程 动态代理类调用过程 动态代理之MethodProxy.invokeSuper Cglib invok ...
随机推荐
- Monitoring SSD Performance::www.brentozar.com
https://www.brentozar.com/archive/2013/05/monitoring-ssd-performance/ May 16, 2013Jeremiah PeschkaSQ ...
- 解决Eclipse建立Maven项目后无src/main/java资源文件夹的办法
建立好一个Maven项目后,如果Java Resources资源文件下没有src/main/java文件夹,并且在手动创建这个文件时提示“已存在文件”.这说明,在这个项目配置中已经有了src/main ...
- 如何在windows下的Python开发工具IDLE里安装其他模块
以安装Httplib2模块为例 1 下载模块 到 “https://code.google.com/p/httplib2/” 下载一款适合你的压缩包“httplib2-0.4.0.zip” 2 解压下 ...
- Enyim Memached 客户端 执行GET 总是返回NULL
排查: 1. ping 远程Linux 服务器 正常 2.11211 端口正常 3. ps aux | grep memcached 显示正常 4. 使用另外一个客户端 memcachedClient ...
- SqlServer数据库1433端口问题1
在本地使用telnet ip 1433 命令测试数据库1433端口是否打开,总是提示错误,根据网上查找资料总结了如下两点思路供参考,欢迎指正! (1)第一种情况可能是"Telnet客户端& ...
- 阻止jQuery事件冒泡
Query对DOM的事件触发具有冒泡特性.有时利用这一特性可以减少重复代码,但有时候我们又不希望事件冒泡.这个时候就要阻止 jQuery.Event冒泡. 在jQuery.Event 的文档 中的开头 ...
- 转: APK签名校验绕过
转: http://drops.wooyun.org/mobile/4296 APK签名校验绕过 3xpl0it · 2014/12/11 10:41 0x01 Android签名机制 将APK重命名 ...
- Android 自定义数字加减器
该自定义View主要是实现一款效果不错的数字加减器的功能的,但是也可以自定义选择器的外观颜色等. 1.自定义View的布局(add_sub_view.xml) <?xml version=&qu ...
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)如何在TwinCAT Scope中做变量监控
为了更好的监控变量,可以打开ScopeView即变量监控器 添加一个Scope View,然后右击添加一个Channel 我们在之前登录的时候可以选择Run-Time的端口(默认是801) ...
- Win7如何设置标准账号无法访问我的D盘
1 右击对应的盘符,选择属性 2 设置对应的权限,比如是否可读,是否可写 3 之后再用这种用户登录就可以知道相应的权限了