美文网首页
2022-12-26

2022-12-26

作者: forios | 来源:发表于2022-12-25 14:23 被阅读0次

    按照《深入理解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,使改动生效。回到代码再次执行,发现改动已经生效。

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

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

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

    相关文章

      网友评论

          本文标题:2022-12-26

          本文链接:https://www.haomeiwen.com/subject/enkgqdtx.html