《深入理解Java虚拟机》openjdk12环境搭建

  • Post author:
  • Post category:java


按照《深入理解Java虚拟机》中的流程进行,有少许区别,记录如下

配置:Mac OS 10.15.7、XCode 12.0.1、jdk12、IDEA

下载代码



https://hg.openjdk.java.net/jdk/jdk12

下载代码一直失败,换成从github下载代码。

git clone git@github.com:openjdk/jdk.git

找到jdk12最后一次提交,tag=jdk-12-ga,本地切换到这个tag上。

编译

sh configure

执行默认配置项,会在/build下生成新的目录。

表示配置成功,过程中的问题靠提示可以解决。

make all或者make images

进行编译。

表示编译成功,过程中遇到的大部分问题在网上可以找到解决办法。

例外的是下面这个

error: comparison of different enumeration types in switch statement ('jvmtiHeapReferenceKind' and 'jvmtiObjectReferenceKind') [-Werror,-Wenum-compare-switch]
        case JVMTI_REFERENCE_ARRAY_ELEMENT:
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.

找到对应的源码修改记录,在本地做对应修改即可,

https://github.com/openjdk/jdk/commit/4dececb589289605d38b8de69f1f3dc7a9a8ecb1

编译完成后,得到的JDK在“JDK源码根目录/build/macosx-x86_64-server-release/jdk”目录下,这里就是可用的JDK,跟$JAVA_HOME里的一样。

使用

创建普通Java工程

执行,可以看出用的是$JAVA_HOME里的JDK

使用自己编译的JDK

再次执行,结果显示,使用的是自己编译的JDK

编辑源码

修改println方法

去JDK源码根目录重新编译JDK,使改动生效。回到代码再次执行,发现改动已经生效。



版权声明:本文为weixin_42228501原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。