编程语言   发布时间:2022-06-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了深入理解Java虚拟机之自己编译JDK大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

题外话

最近在阅读《深入理解Java虚拟机》,其中有一小节实战是自己编译JDK,实际操作下来后遇到问题不少,为此特地记录,也希望可以给大家带来一些参

前置准备

平台及工具:Windows 10 + WSL(ubuntu 20.04) + CLion(2021.2.2)

OpenJDK12下载地址:https://hg.openjdk.java.net/jdk/jdk12/

  • 下载安装解压即可

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

编译工具版本推荐:

  • GCC 7.4及以上

    # Ubuntu上安装GCC命令,该命令默认安装9.3版本(2021年)
    sudo apt-get install build-essential
    

编译依赖库:

工具 库名称 安装命令
FreeType The FreeType Project sudo apt-get install libfreetype6-dev
CUPS Common UNIX PrinTing System sudo apt-get install libcups2-dev
X11 X Window System sudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev
ALSA Advanced Linux Sound Architecture sudo apt-get install libasound2-dev
libffi Portable Foreign Function Interface Library sudo apt-get install libffi-dev
Autoconf Extensible Package of M4 Macros sudo apt-get install autoconf

Bootstrap JDK 准备:

  • OpenJDK11

    sudo apt-get install openjdk-11-jdk
    

开始编译

编译Fastdebug版,仅含Server模式的HotSpot虚拟机命令:

bash configure --enable-debug --with-jvm-variants=server

# 嫌写那么多麻烦,直接用下面这个👇,不过这个是生成release版本的,不利于debug
bash configure

configure命令会进行依赖项检查,参数配置和构建输出目录结构等操作,所以依赖缺失会得到明确提示:

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

ZIP安装命令:

sudo apt-get install zip

继续检查...继续安装缺失的依赖...

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

成功界面:

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

依赖检查通过后,执行@H_24_7@make images命令执行整个OpenJDK的编译,作用是编译出整个JDK镜像

不出所料,编译报错:

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

充分利用了搜索引擎,以及认真阅读了building.md文件后,发现应该是gcc的版本问题,默认安装的是9,但实际需要的是7,于是把9给卸载了,重新安装了个7

# 卸载命令
sudo apt-get remove gcc-9
# 安装7
sudo apt-get install gcc-7
sudo apt-get install g++-7

# 如果上述命令安装后,gcc --version能查出版本而不会报错,就无需使用以下命令
# 或者已有7和9两个版本,但默认用的是9,也可用以下命令修改为7

# 设置默认选项
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 100
sudo update-alternatives --config gcc

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 100
sudo update-alternatives --config g++

@H_262_167@


万事俱备只欠东风。先@H_24_7@make dist-clean清理一波编译生成的临时文件,接着一波流:

bash configure --enable-debug --with-jvm-variants=server
make images

漫长的等待后...没有报错!!!

测试一波:

./build/*/images/jdk/bin/java -version

编译成功:

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

目录结构:

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

在IDE工具上调试

导入JDK源码文件,open file 选择@H_24_7@makeFile,有弹窗清除clean,然后一直确认即可

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

等待导入......

接着会发现帮你生成了一堆的targets,将根目录Mark Directory as 一下

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

然后选all即可,打开编辑,Executable选择编译出来的java命令,Before launch移除Build

具体设置各项参数如图:

@H_944_237@

找到java.c文件,打个断点,直接Debug启动(开始你的表演):

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

配置-version只是测试一下是不是真的能够调试了而已,如果想要调试某个Java类呢

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

IDEA配合Clion远程调试

@H_135_262@IDEA配置
  • 添加Configuration,选择Remote JVM Debug即可:

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

@H_135_262@Clion配置
  • 添加Configuration,选择Custom Build Configuration

  • Target 需要添加一下,

    • @H_543_2@make编译配置

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

    • @H_543_2@make clean配置

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

  • Executable依然选择编译出来的Java命令

  • Program arguments填写:

    -jar
    -Xdebug
    -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5008
    xxx.jar
    
  • Working directory选择:上述jar包生成位置

最终配置如图:

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

资料

《深入理解Java虚拟机:JVM高级特性与最佳实践》(第三版)1.6实战:自己编译JDK

大佬总结

以上是大佬教程为你收集整理的深入理解Java虚拟机之自己编译JDK全部内容,希望文章能够帮你解决深入理解Java虚拟机之自己编译JDK所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。