本地编译jdk源码-JVM系列(一):自己编译jdk遇到的一些陷阱

两个月前开始学习jvm,买了《深入理解Java虚拟机——JVM中级特性与最佳实践——周志明》这本书。 我自己卡在第一章自己编译JDK,还是报错,然后停了两个月,前几天又重新捡起来本地编译jdk源码,终于搞定了。 且不说过程中的惊险刺激,就是想在做完之后把自己经历过的坑都写下来,免得最后一次遭遇。

之后,我遇到了一个困扰我两个月的问题,见右图:

后来这个问题似乎很容易就解决了。 两个月后重新编译时,熟悉的问题又暴露了。 这次我仔细查找这个文件,发现有两个文件(见右图),只是第二个文件是新生成的,名称前面加了一个“.1”。 众所周知,如果文件名重复,Windows系统会在文件名前面手动添加一个“(1)”,以区分之前的文件名。 一个文件,所以我怀疑每次编译都会重新生成这个文件,但是中间我尝试编译了很多次本地编译jdk源码,所以我决定删除编译目标目录(outputdir)(其实是重命名为备份) ),然后重新编译,谢天谢地,终于不再报这个错误了,果然我猜对了。

虽然自己猜对了,但是接下来的过程却并不顺利。 看右图,发现问题应该是版本发布太早了,10年多了,改一下时间就可以了。 参考这个链接:

然后就完全成功了,成功截图如下:

拿出来,按照本书的目录,在netbean中调试jdk源码。 详细内容可以参考本书以及下面的链接: 需要注意的是,在创建工程之前​​需要单独编译hotspot的源码,否则运行命令时会配置不上。 可以找到/jvmg目录以及该目录下的文件。 由于我没有先编译,所以配置的时候并没有在这个目录下找到gamma文件。 在此步骤中,我配置了 /product 目录。 配置完成后,我编译了整个项目,生成了/jvmg目录文档。 我没有比较过两者。 根据官方的解释,这些目录对应着不同的优化级别。 优化级别越高,性能越好,但输出代码与源代码的差异越大,调试起来越困难。 稍后我弄清楚后会添加它。

附上一些配置内容:

#set java environment by liunian
#rootpath=/java/liunianBuildOpenJdk-7u40
rootpath=/java/jdk1.7.0_80
JAVA_HOME=$rootpath/bin
JRE_HOME=$rootpath/jre
CLASSPATH=./:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASSPATH PATH
#export JAVA_HOME=/java/jdk1.6.0_45
#export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#export PATH=$PATH:$JAVA_HOME/bin
ALT_BOOTDIR=/java/jvm/jdk/Contents/Home ARCH_DATA_MODEL=64 LANG=C
/java/openjdk/hotspot/build/linux/linux_amd64_compiler2/jvmg/gamma -XX:+TraceBytecodes -XX:StopInterpreterAt=1 Queens
#/java/jvm/jdkBuild/openjdk_7u40/hotspot/outputdir/linux_amd64_compiler2/product/gamma -XX:+TraceBytecodes -XX:StopInterpreterAt=1 Queens
JAVA_HOME=/java/jdk1.7.0_80
CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/jre/lib/i18n.jar
LD_LIBRARY_PATH=.:${JAVA_HOME}/jre/lib/amd64/native_threads:${JAVA_HOME}/jre/lib/amd64:

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 本地编译jdk源码-JVM系列(一):自己编译jdk遇到的一些陷阱 https://www.wkzy.net/game/169669.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务