JVM学习笔记之动手编译JDK【一】

2020-11-29  本文已影响0人  JiaJianHuang

动手编译 JDK

以下编译的版本是 JDK13,环境为 Deepin15.11

一、下载源码

第一种方式:  Mercurial 版本控制获取源码,下载速度极慢(不推荐)

1.1 安装 Mercurial

# 其它系统请看: https://www.mercurial-scm.org/wiki/TutorialInstall
#https://www.mercurial-scm.org/wiki/Download
#注意python版本Python 2.7.13, 不能高于python3
#可以试用sudo update-alternatives --config python切换python版本
sudo apt-get install mercurial

1.2 下载源码

#像从github一样,拷贝仓库文件
hg clone http://hg.openjdk.java.net/jdk/jdk13 jdk13
cd jdk13/
#赋予脚步执行权限
chmod +x get_source.sh
#执行脚步
sh ./get_source.sh

第二种:直接下载源码包 zip

可以从以下来两个渠道下载源码压缩包

二、编译源码

以下的编译源码选择第二种方式:

2.1 下载 openJDK

#编译的JDK13
wget -c https://hg.openjdk.java.net/jdk/jdk13/archive/tip.zip -O jdk13-src.zip

#Bootstrap JDK
(注意Bootstrap JDK版本要求:编译OpenJDK 12时,Bootstrap JDK必须使用JDK 11及之后的版本)
wget -c https://download.java.net/openjdk/jdk12/ri/openjdk-12+32_linux-x64_bin.tar.gz

2.2 开始编译

编译的文档:https://hg.openjdk.java.net/jdk/jdk13/file/0368f3a073a9/doc/building.md

unzip jdk13-src.zip -d ~/IdeaProjects/JDK/
tar -zxvf  openjdk-12+32_linux-x64_bin.tar.gz -C ~/IdeaProjects/JDK/jdk12

cd ~/IdeaProjects/JDK/
mv jdk13-0368f3a073a9/  jdk13

cd ~/IdeaProjects/JDK/jdk13

# 查看编译参数
./configure --help

#开始编译
./configure \
--with-target-bits=64 \
--with-boot-jdk="../jdk-12" \
--with-jvm-variants=server \
--disable-warnings-as-errors  \
--with-debug-level=slowdebug 2>&1 | tee configure_mac_x64.log

#--with-boot-jdk="../../jdk-12" :指定BootJDK
#--with-debug-level=<level> :release、fastdebug、slowde-bug,越往后进行的优化措施就越少,带的调试信息就越多。默认值为release
#--with-target-bits=<bits>:指明要编译32位还是64位的Java虚拟机
#--with-jvm-variants=<variant>[,<variant>...]:编译特定模式(Variants)的HotSpot虚拟机,可以多个模式并存,可选值为server、client、minimal、core、zero、custom。
configure-jdk.png
# 详细make请看:
#https://github.com/openjdk/jdk/blob/master/doc/building.md#running-make
export LANG=C
#如果需要再次配置 configure,先执行以下命令
make clean && make dist-clean
#执行整个OpenJDK编译
make images

//编译后产生的目录
|-- buildtools  //用于生成、产生编译过程中用到的工具
|-- configure-support  //用于存放configure、make、test的临时文件
|-- hotspot   //虚拟机编译的中间文件
|-- images  //使用make *-images产生的镜像存放的位置
|-- jdk   //编译后产生的jdk
|-- make-support
`-- support  //编译时产生的中间文件

cd ./build/linux-x86_64-server-slowdebug/images/jdk/bin
./java -version

//输出
openjdk version "13-internal" 2019-09-17
OpenJDK Runtime Environment (slowdebug build 13-internal+0-adhoc.hdj.jdk13)
OpenJDK 64-Bit Server VM (slowdebug build 13-internal+0-adhoc.hdj.jdk13, mixed mode, sharing)

三、运行 Java 程序

3.1 编写 HelloWorld.java

/**
 * @author huangjiajian
 */
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("HelloWorld !");
    }
}

3.2 使用编译好的 JDK 运行

cd /home/hdj/IdeaProjects/JDK/jdk13/build/linux-x86_64-server-slowdebug/images/jdk/bin
#编译
./javac /home/hdj/IDEA/Java-Learning/src/main/java/cn/hdj/jvm/compilejdk/HelloWorld.java
#运行
./java -classpath "/home/hdj/IDEA/Java-Learning/src/main/java/"  \
    cn.hdj.jvm.compilejdk.HelloWorld

四、使用 IntellJ Clion 调试源码

4.1 下载 Clion

clion-import-jdk.png
# 根据自己导入的路径来

#添加一些根路径
include_directories(./src/hotspot/share)
include_directories(./src/hotspot/cpu/x86)
include_directories(./src/hotspot/share/utilities)
include_directories(./src/hotspot/share/precompiled)
# include <cstdlib>
# include <cstdint>
# include "register_x86.hpp"
# include "assembler_x86.hpp"
# include "globalDefinitions.hpp"
# include "globalDefinitions_x86.hpp"
# include "assembler_x86.hpp"
#include <stubRoutines_x86.hpp>

4.2 进行调试

image-20201129153338306.png image-20201129154100394.png image-20201129162820882.png

到此,动手编译 JDK 完成了

参考

上一篇下一篇

猜你喜欢

热点阅读