centos7编译JDK
参考:
《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版) - 周志明》
1.要编译的JDK源码
方法一:可以通过 一款叫 Mercurial (OpenJDK 的代码版本管理工具,类似于Git)代码版本管理工具从Respository中获取源码
安装后,执行
hg clone https://hg.openjd.java.net/jdk/jdk12
由于访问速度过慢,不推荐使用方法 一
方法二:直接在OpenJDK的官网上下载打包好的JDK12源码包
访问地址:http://hg.openjdk.java.net/jdk/jdk12/file/06222165c35f
在左侧导航栏,找到自己想要的压缩格式,下载后解压到本地
进入到安装目录,执行
wget http://hg.openjdk.java.net/jdk/jdk12/archive/06222165c35f.tar.gz
下载完成后,执行
tar -xzvf 06222165c35f.tar.gz
2.安装要编译的JDK的上一个版本JDK(因为编译JDK时要有一个编译期可使用的JDK,官方称作这个JDK叫Bootstrap JDK)
安装上一版本JDK,这里安装JDK11
执行
yum install -y java-11-openjdk-devel
如果不是管理员 加上 sudo
java -version
验证是否安装成功
3.安装GCC 版本至少4.8以上, 官方推荐版本7.8 或 CLang 3.2 以上
由于centos7 默认 GCC 版本为4.8.3,这里做一下升级
SCL(Software Collections)是为了给RHEL/CentOS 用户提供一种以方便、安全地安装和使用应用程序和运行时环境的多个(而且可能是更新的)版本的方式,同时避免把系统搞乱。与之相对的是第三方源,它们可能会在已安装的包之间引起冲突。
yum install centos-release-scl yum install devtoolset-7 scl enable devtoolset-7 bash
同样,不是管理员的话加上 sudo
4.编译JDK
进入到源码位置,执行
bash configure
执行失败的话,不要紧,分析报错提示,下载相关依赖,如
上面提示 sudo yum install alsa-lib-devel
照跑就是。
到最后,不报任何错误后,执行
make images
开始编译,编译完后,进入到jdk目录下的 ./build/配置名称/jdk 可以看到编译后的文件 (配置名称没有设置的话,会是编译的机器名)
执行
./java -version
可以查看编译后的JDK版本
以上是没有加入任何编译参数的编译方式
关于参数,可以通过 bash configrue --help 查看
下面列出一些常用参数
--with-debug-level=<level>:设置编译的级别,可选值为release、fastdebug、slowde-bug,越往后进 行的优化措施就越少,带的调试信息就越多。
还有一些虚拟机调试参数必须在特定模式下才可以使 用。默认值为release。