2022-12-26

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

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

下载代码

从https://hg.openjdk.java.net/jdk/jdk12下载代码一直失败,换成从github下载代码。

git clone [email protected]: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,使改动生效。回到代码再次执行,发现改动已经生效。

————————————————

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

原文链接:https://blog.csdn.net/weixin_42228501/article/details/123691630

你可能感兴趣的:(2022-12-26)