【JVM】跟我一起来编译OpenJDK
创始人
2025-01-11 09:03:14
0次

编译OpenJDK

前言

作为一名Javer,应该不少人都想编译一下OpenJDK然后在项目中用上它,自己还可以在OpenJDK中加入自己的东西,而不用受限于Oracle官网上的JDK,市面上还有很多技术也是运行在JVM之上的,这更加说明了研究JVM的重要性,比如Kotlin、Groovy、JRuby、Jython、Scala等等,接下来让我们一起探索JVM吧~

环境准备

  • VMware 17
    在这里插入图片描述
  • OpenJDK 1.8
    openjdk-8u40-src-b25-10_feb_2015.zip
  • BootJDK:1.7
    jdk-7u80-linux-x64.tar.gz
  • Ubuntu 16
cover@ubuntu:~/Documents$ cat /proc/version Linux version 4.15.0-45-generic (buildd@lcy01-amd64-027) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10)) #48~16.04.1-Ubuntu SMP Tue Jan 29 18:03:48 UTC 2019 

PS:这里需要解释下Boot JDK这里的作用,因为OpenJDK里面有些功能是用Java代码实现的,这些需要Boot JDK支持,比如说jps、jstat、jmap、jinfo等,还有一些核心的jar包,如rt.jar、tools.jar等。但是Boot JDK有个要求就是需要比你要编译的OpenJDK版本要低,但是低多少,这个没法说,需要去实践,理论上来说,但是建议低一个版本即可,因为版本相差太多的话,差异也会随之增大。

安装依赖

sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev libcups2-dev libfreetype6-dev libasound2-dev ccache 

Boot JDK

解压到Document目录下,然后配置环境

tar -zxvf jdk-7u80-linux-x64.tar.gz 
vi ~/.bashrc  (把cover改成你自己的用户名)  export JAVA_HOME=/home/cover/Documents/jdk1.7.0_80 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH  载入配置 source ~/.bashrc 

OpenJDK

进入到OpenJDK的目录,执行命令之前,先确认下自己所在的目录是否正确
在这里插入图片描述
接下来我们修改下一个文件的权限,由于我这里是已经改过了,所以configure文件已经是可以执行了,但你所在的环境是没有的,需要执行下面的命令进行修改

chmod u+x configure 

配置好权限后,执行下面的配置命令

sudo ./configure --with-target-bits=64 --with-boot-jdk=/home/cover/Documents/jdk1.7.0_80 --with-debug-level=slowdebug --enable-debug-symbols ZIP_DEBUGINFO_FILES=0 

执行成功后,你会看到如下
在这里插入图片描述

编译

sudo make all DISABLE_HOTSPOT_OS_VERSION_CHECK=OK ZIP_DEBUGINFO_FILES=0 

这个编译过程会比较久,这里需要注意一下,在安装Ubuntu16.0的镜像时,尽量分配足够多的内存和核数和磁盘空间,因为编译期间需要把文件加载到内存当中,而且编译文件也会占据磁盘空间

内存:10GB 处理器:2 x 2  磁盘:200GB 

在这里插入图片描述

可能遇到的坑

在编译过程中,你可能会遇到下面的坑,如果没有遇到,那么你是幸运的。
在这里插入图片描述
图中的报错提示,时间超过10年。你可能会觉得很懵,这个其实是OpenJDK的一个时区问题,网上很多给出的解决方案都是让你去改一个叫作CurrencyData.properties的文件里面对应的时区,我尝试过改方案,发现还是会报这个错
在这里插入图片描述
在这里插入图片描述
那么回到报错的本质,既然报错是由一个java文件引起的,那么我们可以修改异常报错的地方来解决,首先我们通过以下命令来查找下这个文件的位置

find ./ -name GenerateCurrencyData.java ./jdk/make/src/classes/build/tools/generatecurrencydata/GenerateCurrencyData.java vi ./jdk/make/src/classes/build/tools/generatecurrencydata/GenerateCurrencyData.java 

在这里插入图片描述
在这里插入图片描述
我们可以搜索这个一场信息找到这个位置,这里原本的判断是10,我这里改成了100,然后保存,继续运行

sudo make all DISABLE_HOTSPOT_OS_VERSION_CHECK=OK ZIP_DEBUGINFO_FILES=0 

如果没有其它问题的话,你会看到如下输出
在这里插入图片描述

替换环境变量

既然已经编译成功了,那么我们可以将环境变量中的JAVA_HOME替换回我们编译好的了

vi ~/.bashrc  export JAVA_HOME=/home/cover/Documents/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH  

然后运行java -version查看是否配置成功

java -version 

在这里插入图片描述

相关内容

热门资讯

每日必备透视挂!微信微乐辅助免... 每日必备透视挂!微信微乐辅助免费,小程序微乐辅助器免费版-一直真的是有辅助器1、点击下载安装,微信微...
实测揭晓辅助!微信小程序微乐辅... 您好,微信小程序微乐辅助器教程这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302...
1.9分钟了解透视挂!微信小程... 1.9分钟了解透视挂!微信小程序微乐辅助器教程,微信微乐挂有没有-一贯存在有辅助软件1、不需要AI权...
发现一款辅助!微信微乐辅助免费... 发现一款辅助!微信微乐辅助免费,微乐兰州麻将小程序辅助-确实是真的有辅助挂1、许多玩家不知道微信微乐...
重大来袭开挂!微乐小程序辅助工... 重大来袭开挂!微乐小程序辅助工具,微信微乐小程序辅助软件-好像真的有辅助app1)微乐小程序辅助工具...
玩家必备科技辅助!微信微乐小程... 玩家必备科技辅助!微信微乐小程序游戏辅助脚本,微乐山西威信小程序-总是是有辅助神器微信微乐小程序游戏...
盘点几款透视挂!小程序微乐游戏... 盘点几款透视挂!小程序微乐游戏辅助器,微乐小程序脚本-其实有辅助技巧1.小程序微乐游戏辅助器 选牌创...
分辨真假辅助!微乐小程序开挂黑... 分辨真假辅助!微乐小程序开挂黑科技,微信小程序微乐修改器-都是存在有辅助教程1、不需要AI权限,帮助...
查到实测透视挂!微信小程序微乐... 查到实测透视挂!微信小程序微乐辅助器,小程序跑得快的技巧-原来真的是有辅助教程1、超多福利:超高返利...
关于透视挂!微信小程序微乐辅助... 关于透视挂!微信小程序微乐辅助器,微乐自建房黑科技辅助工具下载-真是是有辅助技巧该软件可以轻松地帮助...