环境

Ubuntu12.4-http://mirrors.163.com/ubuntu-releases/12.04/ --需要安装纯英文版,避免中文引起不必要的麻烦

OpenJDK7-https://download.java.net/openjdk/jdk7/

tips:由于OpenJDK部分代码使用java语言编写,所以需要一个编译好的jdk来编译(。。。。禁止套娃)

BootstrapJDK-jdk-7u80-linux-x64.tar.gz(可以到Oracle下载)

这里使用Oracle VM VirtualBox作为虚拟机演示

安装依赖

  1. 1.安装库
  2. sudo apt-get install build-essential gawk m4 libasound2-dev libcups2-dev libxrender-dev xorg-dev xutils-dev x11proto-print-dev binutils libmotif3 libmotif-dev ant libxt-dev libxtst-dev
  3. 如果一次安装不成功,请多试几次,或者更换源
  4. 2.解压OpenJDKBootstrapJDK到相应目录下
  5. OpenJDK:/home/pumpkin/j7/openjdk
  6. BootstrapJDK:/home/pumpkin/j7/jdk1.7
  7. 因为jdk7年代已久,需要对openjdk的文件做些许修改:
  8. openjdk/jdk/src/share/classes/java/util/CurrencyData.properties文件,将其中所有的10年前日期改为10年以内的,否则会报错:time is more than 10 years from present

创建make脚本

在OpenJDK目录内创建此make.sh脚本,修改其中的两个路径 ,并赋予执行权限

  1. #语言选项,这个必须设置,否则编译好后会出现一个HashTable的NPE错
  2. export LANG=C
  3. #Bootstrap JDK的安装路径。必须设置。
  4. export ALT_BOOTDIR=/home/pumpkin/j7/jdk1.7
  5. #允许自动下载依赖
  6. export ALLOW_DOWNLOADS=true
  7. #并行编译的线程数,设置为和CPU内核数量一致即可
  8. export HOTSPOT_BUILD_JOBS=2
  9. export ALT_PARALLEL_COMPILE_JOBS=2
  10. #比较本次build出来的映像与先前版本的差异。这个对我们来说没有意义,必须设置为false,否则sanity检查会报缺少先前版本JDK的映像。如果有设置dev或者DEV_ONLY=true的话这个不显式设置也行。
  11. export SKIP_COMPARE_IMAGES=true
  12. #使用预编译头文件,不加这个编译会更慢一些
  13. export USE_PRECOMPILED_HEADER=true
  14. #要编译的内容
  15. export BUILD_LANGTOOLS=true
  16. #export BUILD_JAXP=false
  17. #export BUILD_JAXWS=false
  18. #export BUILD_CORBA=false
  19. export BUILD_HOTSPOT=true
  20. export BUILD_JDK=true
  21. #要编译的版本
  22. #export SKIP_DEBUG_BUILD=false
  23. #export SKIP_FASTDEBUG_BUILD=true
  24. #export DEBUG_NAME=debug
  25. #把它设置为false可以避开javaws和浏览器Java插件之类的部分的build。
  26. BUILD_DEPLOY=false
  27. #把它设置为false就不会build出安装包。因为安装包里有些奇怪的依赖,但即便不build出它也已经能得到完整的JDK映像,所以还是别build它好了。
  28. BUILD_INSTALL=false
  29. #编译结果所存放的路径
  30. export ALT_OUTPUTDIR=/home/pumpkin/j7/pumpkinJDK7
  31. #这两个环境变量必须去掉,不然会有很诡异的事情发生(我没有具体查过这些“”诡异的事情”,Makefile脚本检查到有这2个变量就会提示警告“)
  32. unset JAVA_HOME
  33. unset CLASSPATH
  34. make 2>&1 | tee $ALT_OUTPUTDIR/build.log

运行make.sh

openjdk#sh make.sh

我在虚拟机中编译,大约需要23min

编译好的java -version 虚拟机信息中心会带有用户信息

《深入理解JAVA虚拟机》-自己动手编译JDK的更多相关文章

  1. 深入理解Java虚拟机之自己编译JDK

    题外话 最近在阅读<深入理解Java虚拟机>,其中有一小节实战是自己编译JDK,实际操作下来后遇到问题不少,为此特地记录,也希望可以给大家带来一些参考! 前置准备 平台及工具:Window ...

  2. 深入理解Java虚拟机 #01# 自己编译JDK

    x 首先用书上的脚本尝试,失败. 之后根据源文件的 README 编译,抛出: root@linux:/opt/openjdk# sh ./get_source.sh ERROR: Need init ...

  3. 深入理解Java虚拟机(程序编译与代码优化)

    文章首发于微信公众号:BaronTalk,欢迎关注! 对于性能和效率的追求一直是程序开发中永恒不变的宗旨,除了我们自己在编码过程中要充分考虑代码的性能和效率,虚拟机在编译阶段也会对代码进行优化.本文就 ...

  4. 深入理解Java虚拟机(九)——后端编译与优化

    即时编译器 Java程序最初都是通过解释器进行执行,当发现某个方法或者代码块被运行得非常频繁,这些代码就被认为是热点代码,为了提高这些代码得运行效率,虚拟机会把热点代码编译成本地机器码,并进行优化,运 ...

  5. 《深入理解java虚拟机》学习笔记之编译优化技术

    郑重声明:本片博客是学习<深入理解Java虚拟机>一书所记录的笔记,内容基本为书中知识. Java程序员有一个共识,以编译方式执行本地代码比解释方式更快,之所以有这样的共识,除去虚拟机解释 ...

  6. 《深入理解java虚拟机》学习笔记之虚拟机即时编译详解

    郑重声明:本片博客是学习<深入理解java虚拟机>一书所记录的笔记,内容基本为书中知识. Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块 ...

  7. 深入理解Java虚拟机(类文件结构)

    深入理解Java虚拟机(类文件结构) 欢迎关注微信公众号:BaronTalk,获取更多精彩好文! 之前在阅读 ASM 文档时,对于已编译类的结构.方法描述符.访问标志.ACC_PUBLIC.ACC_P ...

  8. 《深入理解Java虚拟机》虚拟机性能监控与故障处理工具

    上节学习回顾 从课本章节划分,<垃圾收集器>和<内存分配策略>这两篇随笔同属一章节,主要是从理论+实验的手段来讲解JVM的内存处理机制.好让我们对JVM运行机制有一个良好的概念 ...

  9. 《深入理解 java虚拟机》学习笔记

    java内存区域详解 以下内容参考自<深入理解 java虚拟机 JVM高级特性与最佳实践>,其中图片大多取自网络与本书,以供学习和参考.

  10. (1) 深入理解Java虚拟机到底是什么?

    好文转载:http://blog.csdn.net/zhangjg_blog/article/details/20380971 什么是Java虚拟机   作为一个Java程序员,我们每天都在写Java ...

随机推荐

  1. HZOJ 光

    一道大模拟,打的我要吐了. 先说一下60%暴力吧,其实模拟光的路线即可,最好还是把边界设为障碍,这样就不用判边界了.最后输出n*m可以骗到10分. 注意不要把n和m弄混(愁死我了). #include ...

  2. BERT可视化工具bertviz体验

    BERT可视化工具体验:bertviz是用于BERT模型注意力层的可视化页面. 1,bertviz的github地址:https://github.com/jessevig/bertviz 2,将be ...

  3. Vue点击事件失效

    在做项目时给button添加click事件,发现没反应,但另外写了一个button添加同样的事件,却能触发.原因是使用了better-scroll,默认它会阻止touch事件.所以在配置中需要加上cl ...

  4. Eclipse里编辑代码,进度条出现“Remote System Explorer Operation”解决方法

    Eclipse里编辑代码,进度条出现"Remote System Explorer Operation",导致Eclipse有卡顿. 解决方法: Eclipse -> Pre ...

  5. 用winrar和zip命令拷贝目录结构

    linux系统下使用zip命令 zip -r source.zip source -x *.php -x *.html # 压缩source目录,排除里面的php和html文件 windows系统下使 ...

  6. Innodb_large_prefix

    innodb_large_prefix Prefixes, defined by the length attribute, can be up to 767 bytes long for InnoD ...

  7. 51nod 1380"夹克老爷的逢三抽一"(贪心+set)

    传送门 •参考资料 [1]:51Nod-1380-夹克老爷的逢三抽一 •题意 从长度为 n 的数组中抽取 $\frac{n}{3}$ 个不相邻的值使得加和最大(首尾也不能同时取) •题解 贪心选择当前 ...

  8. win2d 渐变颜色

    本文告诉大家如何在 win2d 使用渐变颜色 线条渐变 在 UWP 的 Win2d 使用渐变颜色需要 CanvasLinearGradientBrush 做颜色,本文告诉大家如何在 win2d 使用 ...

  9. html设置<input type="text">内的内容自动为大写

    添加css样式:text-transform:uppercase;可以实现自动转换为大写样式. 但是input 的value还是小写的,因为它是CSS样式. <input type=" ...

  10. P1096 4个数的全排列

    题目描述 输入4个有序的个位数.按照字典序输出它们的全排列. 输入格式 输入四个数字a,b,c,d.(0<=a,b,c,d<10) 输出格式 输出它们的全排列.每个排列占一行.而且每个排列 ...