源码编译OpenJDK 15

Posted 氷泠之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了源码编译OpenJDK 15相关的知识,希望对你有一定的参考价值。

概述

本文主要讲述如何对OpenJDK15进行源码编译操作以及进行简单的调试。

获取源码+BootJDK

可以使用如下命令检测下载文件的完整性:

echo "bb67cadee687d7b486583d03c9850342afea4593be4f436044d785fba9508fb7 openjdk-15+36_linux-x64_bin.tar.gz" | sha256sum --check
echo "d07bf62b4b20fa6bcd4c8fcd635e5df20b7c090af291675b2bd99f8cea8760a0 openjdk-15+36_src.zip" | sha256sum --check

另外需要准备一个BootJDK,根据BootJDK的规则:

源码编译OpenJDK 15

建议使用当前版本号/版本号-1/版本号-2JDK,这里选用的是OpenJDK 15

安装依赖库

笔者系统Manajro,需要安装一些基础依赖:

paru -S base-devel
# 或
pacman -S base-devel
# 或
yay -S base-devel

如果依赖库安装不完整在配置阶段以及编译阶段会给出相应提示,再进行对应依赖安装即可。

编译

解压源码进入目录:

unzip openjdk-15+36_src.zip
tar -zxvf openjdk-15+36_linux-x64_bin.tar.gz
cd openjdk

配置:

bash configure --with-debug-level=slowdebug --with-jvm-variants=server --with-target-bits=64 --with-memory-size=8000 --disable-warnings-as-errors --with-native-debug-symbols=internal --with-boot-jdk=../jdk-15

参数说明:

  • --with-debug-level=slowdebug:编译 DEBUG版本的 JDK,选项可以是 slowdebug/ fastdebug/ release/ optimized
  • --with-jvm-variants=server:构建 server变体的 Hotspot,选项可以是 server/ client/ minimal/ core/ zero/ custom
  • --with-target-bits=64:编译64位的 JDK,编译32位可以使用 --with-target-bits=32
  • --with-memory-size=8000:编译的计算机至少需要8G内存,这个可以根据个人需要调整
  • --disable-warnings-as-errors:忽略警告的信息,注意该参数很重要,不加的话会显示配置成功但 make失败
  • --with-native-debug-symbols=internal:生成 symbol文件,便于后续调试,选项可以是 internal/ none/ external/ zipped
  • --with-boot-jdkBootJDK的目录

结果:

源码编译OpenJDK 15

配置后进行编译:

make images

这个阶段需要一点时间,而且会把CPU拉满,好了之后会提示Finished building

源码编译OpenJDK 15

笔者环境下编译出来的JDK占了3G:

源码编译OpenJDK 15

进入对应目录可以查看版本:

源码编译OpenJDK 15

调试

调试需要gdb,先安装好gdb

paru -S gdb

进入bin目录(build/linux-x86_64-server-slowdebug/jdk/bin),输入:

gdb -args ./java -version
源码编译OpenJDK 15

main函数打断点:

(gdb) b main

再执行run,可以看到会停在java.base/share/native/launcher/main.c第98行:

(gdb) run

再次输入n可进行单步调试:

(gdb) n

这样就算完成了基础的调试操作,为进一步学习JVM准备好基本的环境。


以上是关于源码编译OpenJDK 15的主要内容,如果未能解决你的问题,请参考以下文章

HBase 源码 | ZGC 初体验-OpenJDK 15编译 HBase 1.4.8

HBase源码篇 | ZGC初体验——OpenJdk 15编译HBase 1.4.8

Mac 编译jdk源码小记

Mac 编译jdk源码小记

编译你的第一个Java虚拟机--Centos 7 编译openJdk1.7源码

openjdk7之编译和debug