《深入理解JAVA虚拟机》-自己动手编译JDK
程序员文章站
2022-03-10 11:53:19
环境 Ubuntu12.4 http://mirrors.163.com/ubuntu releases/12.04/ 需要安装纯英文版,避免中文引起不必要的麻烦 OpenJDK7 https://download.java.net/openjdk/jdk7/ tips:由于OpenJDK部分代码使 ......
环境
ubuntu12.4- --需要安装纯英文版,避免中文引起不必要的麻烦
openjdk7-
tips:由于openjdk部分代码使用java语言编写,所以需要一个编译好的jdk来编译(。。。。禁止套娃)
bootstrapjdk-jdk-7u80-linux-x64.tar.gz(可以到oracle下载)
这里使用oracle vm virtualbox作为虚拟机演示
安装依赖
1.安装库 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 如果一次安装不成功,请多试几次,或者更换源 2.解压openjdk和bootstrapjdk到相应目录下 openjdk:/home/pumpkin/j7/openjdk bootstrapjdk:/home/pumpkin/j7/jdk1.7 因为jdk7年代已久,需要对openjdk的文件做些许修改: openjdk/jdk/src/share/classes/java/util/currencydata.properties文件,将其中所有的10年前日期改为10年以内的,否则会报错:time is more than 10 years from present
创建make脚本
在openjdk目录内创建此make.sh脚本,修改其中的两个路径
,并赋予执行权限
#语言选项,这个必须设置,否则编译好后会出现一个hashtable的npe错 export lang=c #bootstrap jdk的安装路径。必须设置。 export alt_bootdir=/home/pumpkin/j7/jdk1.7 #允许自动下载依赖 export allow_downloads=true #并行编译的线程数,设置为和cpu内核数量一致即可 export hotspot_build_jobs=2 export alt_parallel_compile_jobs=2 #比较本次build出来的映像与先前版本的差异。这个对我们来说没有意义,必须设置为false,否则sanity检查会报缺少先前版本jdk的映像。如果有设置dev或者dev_only=true的话这个不显式设置也行。 export skip_compare_images=true #使用预编译头文件,不加这个编译会更慢一些 export use_precompiled_header=true #要编译的内容 export build_langtools=true #export build_jaxp=false #export build_jaxws=false #export build_corba=false export build_hotspot=true export build_jdk=true #要编译的版本 #export skip_debug_build=false #export skip_fastdebug_build=true #export debug_name=debug #把它设置为false可以避开javaws和浏览器java插件之类的部分的build。 build_deploy=false #把它设置为false就不会build出安装包。因为安装包里有些奇怪的依赖,但即便不build出它也已经能得到完整的jdk映像,所以还是别build它好了。 build_install=false #编译结果所存放的路径 export alt_outputdir=/home/pumpkin/j7/pumpkinjdk7 #这两个环境变量必须去掉,不然会有很诡异的事情发生(我没有具体查过这些“”诡异的事情”,makefile脚本检查到有这2个变量就会提示警告“) unset java_home unset classpath make 2>&1 | tee $alt_outputdir/build.log
运行make.sh
openjdk#sh make.sh
我在虚拟机中编译,大约需要23min
编译好的java -version 虚拟机信息中心会带有用户信息