学习JVM---编译OpenJDK12(Mac)

前言

最近在学习周志明老师的《深入理解java虚拟机》,看过第一章以后记录一下自己在mac上编译jdk12的过程。

资源准备

环境是系统是macos10.15.3,安装xcode11.3.1,下载 Command Line Tools ,使用工具homebrew

首先是资源的准备:

  1. openjdk12的下载,
  2. 一个启动的jdk(Bootstrap
    JDK)【因为要编译的jdk有很多代码是使用java编写,要编译这些代码就需要另一个已经编译过的jdk,这个jdk要比当前版本少一】,我使用的是社区版的openjdk11(AdoptOpenJDK)。
  3. 使用homebrew安装依赖
    brew install ccache //加速编译
    brew install freetype //字体引擎,编译过程中会被依赖到

编译

编译前

编译前要好好阅读下载的openjdk里common文件夹中的doc文件夹下的build.html文件,有关于你编译的jdk需要环境的详细解读,如上文的xcode的版本,系统的要求

编译

我们用终端cd到openjdk文件夹的common下
通过bash configure --help查看configure参数信息

然后通过 命令 bash configure 验证当前环境是否能成功编译,命令如下:

参数说明

--with-debug-level=slowdebug 启用slowdebug级别调试
--with-jvm-variants=server 编译server类型JVM
--enable-ccache 启用ccache,加快编译
--with-freetype=/usr/local/Cellar/freetype/2.10.1(你的版本)
--disable-warnings-as-errors 忽略警告
--with-boot-jdk=/Users/haozhipeng/Downloads/openjdk11/Contents/Home 启动jdk的设置

debug-level代表了优化级别,可选值为release,fastbug,slowdebug。优化级别越高,性能自然就越好,但是输出代码与源码的差距就越大,难于调试

命令

bash configure --with-debug-level=slowdebug --with-jvm-variants=server --enable-ccache --with-freetype=/usr/local/Cellar/freetype/2.10.1 --with-boot-jdk=/Users/haozhipeng/Downloads/openjdk11/Contents/Home --disable-warnings-as-errors

运行命令后如果没问题,会出现如下界面:

A new configuration has been successfully created in
/Users/haozhipeng/Downloads/openjdk/build/macosx-x86_64-server-slowdebug
using configure arguments '--with-debug-level=slowdebug --enable-ccache --with-jvm-variants=server --with-boot-jdk=/Users/haozhipeng/Downloads/openjdk-11_osx-x64_bin/jdk-11.jdk/Contents/Home --disable-warnings-as-errors'.

Configuration summary:
* Debug level:    slowdebug
* HS debug level: debug
* JVM variants:   server
* JVM features:   server: 'aot cds cmsgc compiler1 compiler2 dtrace epsilongc g1gc graal jfr jni-check jvmci jvmti management nmt parallelgc serialgc services shenandoahgc vm-structs' 
* OpenJDK target: OS: macosx, CPU architecture: x86, address length: 64
* Version string: 12-internal+0-adhoc.haozhipeng.openjdk (12-internal)

Tools summary:
* Boot JDK:       openjdk version "11" 2018-09-25 OpenJDK Runtime Environment 18.9 (build 11+28) OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)  (at /Users/haozhipeng/Downloads/openjdk-11_osx-x64_bin/jdk-11.jdk/Contents/Home)
* Toolchain:      clang (clang/LLVM from Xcode 11.3.1)
* C Compiler:     Version 11.0.0 (at /usr/bin/clang)
* C++ Compiler:   Version 11.0.0 (at /usr/bin/clang++)

Build performance summary:
* Cores to use:   8
* Memory limit:   16384 MB
* ccache status:  Active (3.7.7)

开始编译

使用make images开始编译
编译后结尾是这样的:

注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
Compiling 8 files for BUILD_DEMO_TableExample
Updating support/demos/image/jfc/TableExample/src.zip
Compiling 1 files for BUILD_DEMO_TransparentRuler
Updating support/demos/image/jfc/TransparentRuler/src.zip
注: 某些输入文件使用或覆盖了已过时的 API。
注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
注: /Users/haozhipeng/Downloads/openjdk/src/demo/share/jfc/TableExample/TableExample4.java使用了未经检查或不安全的操作。
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
Creating support/demos/image/jfc/CodePointIM/CodePointIM.jar
Creating support/demos/image/jfc/FileChooserDemo/FileChooserDemo.jar
Creating support/demos/image/jfc/SwingSet2/SwingSet2.jar
Creating support/demos/image/jfc/Font2DTest/Font2DTest.jar
Creating support/demos/image/jfc/J2Ddemo/J2Ddemo.jar
Creating support/demos/image/jfc/Metalworks/Metalworks.jar
Creating support/demos/image/jfc/Notepad/Notepad.jar
Creating support/demos/image/jfc/Stylepad/Stylepad.jar
Creating support/demos/image/jfc/SampleTree/SampleTree.jar
Creating support/demos/image/jfc/TableExample/TableExample.jar
Creating support/demos/image/jfc/TransparentRuler/TransparentRuler.jar
Creating jdk image
Creating CDS archive for jdk image
Stopping sjavac server
Finished building target 'images' in configuration 'macosx-x86_64-server-slowdebug'

编译成功后会出现如下目录
在这里插入图片描述
进入build/配置名称/jdk目录下可以看到完整openjdk的编译结果,但不知道为什么把它当成jdk直接使用不行,必须使用build/配置名称/images目录下的jdk才能当成jdk直接使用。

验证

将编译成功的jdk
cd进入build/配置名称/jdk/bin目录下,输入java -version即可看到编译jdk的版本信息。

openjdk version "12-internal" 2019-03-19
OpenJDK Runtime Environment (slowdebug build 12-internal+0-adhoc.haozhipeng.openjdk)
OpenJDK 64-Bit Server VM (slowdebug build 12-internal+0-adhoc.haozhipeng.openjdk, mixed mode)

错误处理

在编译中踩了一些坑,分享给大家希望大家看到类似情况可以有相应的解决方案。

1.沙雕的忘记准备启动jdk

导致输入环境验证命令后出现如下错误

configure: Could not find a valid Boot JDK. You might be able to fix this by running 'brew cask install java'.
configure: This might be fixed by explicitly setting --with-boot-jdk
configure: error: Cannot continue
/Users/haozhipeng/Downloads/openjdk/build/.configure-support/generated-configure.sh: line 82: 5: Bad file descriptor

所以一定要准备启动jdk!!!

最后,上述仅代表我自己的编译过程,其中如果有用词浅薄的地方希望大家多多指正,转载请附上说明,谢谢!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值