构建Jvm环境

Linux环境下

准备环境

  1. 需要安装高版本JDK 推荐 JDK 16+

  2. 需要编译的jdk下载下来

    git clone https://git.openjdk.java.net/jdk/
    
  3. 环境安装

    # 下载openjdk16
     # https://jdk.java.net/16/
     wget https://download.java.net/java/GA/jdk16.0.2/d4a915d82b4c4fbb9bde534da945d746/7/GPL/openjdk-16.0.2_linux-x64_bin.tar.gz
    
     # 安装openJdk16 / 如果在后面的编译中报错,就换高版本JDK
     sudo mkdir -p /usr/java/openjdk
     sudo cp openjdk-16.0.2_linux-x64_bin.tar.gz  /usr/java/openjdk/openjdk-16.0.2_linux-x64_bin.tar.gz 
     cd /usr/java/openjdk
     sudo tar -xzvf openjdk-16.0.2_linux-x64_bin.tar.gz
    
     #部署环境
     sudo nano /etc/profile
     ## 在文件尾部添加
     # OpenJDK 16.0.2
     JAVA_HOME=/usr/java/openjdk/jdk-16.0.2
     PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
     export JAVA_HOME
     export PATH
    
     # Ctrl +o回车保存,ctrl+x离开;
     source /etc/profile 
    
     # 安装编译jdk要求的依赖
     sudo apt-get install build-essential gawk m4 libasound2-dev libcups2-dev libxrender-dev xorg-dev xutils-dev binutils libmotif-dev ant autoconf unzip zip
    
     #卸载openjdk 11
     sudo apt-get remove openjdk*
     sudo source /etc/profile
    
  4. 进入git clone 后的目录 cd jdk

  5. 开始编译

       bash configure
    
  6. 如果正常会显示如下(非正常按照提示apt install缺失依赖即可 )

       #示例
       Configuration summary:
       * Debug level:    fastdebug
       * HS debug level: fastdebug
       * JVM variants:   server
       * JVM features:   server: 'aot cds cmsgc compiler1 compiler2 epsilongc g1gc graal jfr jni-check jvmci jvmti management nmt parallelgc serialgc services shenandoahgc vm-structs zgc'
       * OpenJDK target: OS: linux, CPU architecture: x86, address length: 64
       * Version string: 12-internal+0-adhoc.weizhishang.jdk12-06222165c35f (12-internal)
    
       Tools summary:
       * Boot JDK:       openjdk version "11.0.10" 2021-01-19 OpenJDK Runtime Environment (build 11.0.10+9-Ubuntu-0ubuntu1.18.04) OpenJDK 64-Bit Server VM (build 11.0.10+9-Ubuntu-0ubuntu1.18.04, mixed mode, sharing)  (at /usr/lib/jvm/java-11-openjdk-amd64)
       * Toolchain:      gcc (GNU Compiler Collection)
       * C Compiler:     Version 7.5.0 (at /usr/bin/gcc)
       * C++ Compiler:   Version 7.5.0 (at /usr/bin/g++)
    
       Build performance summary:
       * Cores to use:   3
       * Memory limit:   3932 MB
    
  7. 最后进行编译,去喝杯咖啡,这个过程得十几分钟

       make images
    
  8. 没有报错的话,测试下编译后的jdk版本

    ./build/*/images/jdk/bin/java -version
    
  9. 基本测试

    make run-test-tier1
    
    
    

## Linux增强

# 修改镜像源 Ubuntu 20.04 LTS
/etc/apt/sources.list

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

导入到Clion

在项目根目录新加CMakeLists.txt:

cmake_minimum_required(VERSION 3.7)
project(hotspot)

include_directories(
		src/hotspot/cpu
		src/hotspot/os
		src/hotspot/os_cpu
		src/hotspot/share
		src/hotspot/share/precompiled
		src/hotspot/share/include
		src/java.base/unix/native/include
		src/java.base/share/native/include
		src/java.base/share/native/libjli
)

file(GLOB_RECURSE SOURCE_FILES "*.cpp" "*.hpp" "*.c" "*.h")
add_executable(hotspot ${SOURCE_FILES})

参考资料

https://www.codenong.com/js108c984f8872/

https://zhuanlan.zhihu.com/p/366984099

Ubuntu如何安装JDK16

导入到Clion

Q.E.D.


纵我不往,子宁不嗣音?。纵我不往,子宁不来?