学习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!!!

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容