前言

下载过程和编译过程时间比较长,我这里使用的是直接就可以configure的包,不需要下载其他源,本次使用的包在这里。
http://zjyun.cc:6003/s/RFSnQQ2kcJiP3BL
《深入理解Java虚拟机》中编译的是jdk12,我这里使用的是jdk8,原理一样的,看自己喜好。


环境准备

我是在物理机上单独虚出来一个1g 1核的虚机,资源有限所以后面的编译时间也有些长,建议4核4g 好点。


部署环境

事先准备一套jdk7 或者8的包,我使用的版本如下:
image.png


下载OPenJDK包

http://zjyun.cc:6003/s/RFSnQQ2kcJiP3BL
也可以下载我这个,也可以使用官方的包,但是需要getsource 需要好久时间。


修改bootclasspath

这部是之前试错试出来的,即使你安装了自己的jdk,但是还是会在make 最后的阶段报错:
修改
vi ./nashorn/make/BuildNashorn.gmk 第80行
将-path修改为=> -Xbootclasspath 如图:
image.png

如果想错误复现使用原来的path make就行。


执行configure

nohup bash ./configure --with-target-bits=64 --with-boot-jdk=/usr/local/java/ --with-debug-level=slowdebug --with-update-version="1.8_wzj"    > build.log &

版本不同可能使用的参数不一样,具体可以参考–help
–with-boot-jdk:指定你自己事前安装的。
–with-update-version:指定自己的版本。
–with-debug-level。
·–with-debug-level=:设置编译的级别,可选值为 release、fastdebug、slowde-bug,越往后进行的优化措施就越少,带的调试信息就越多。还有一些虚拟机调试参数必须在特定模式下才可以使用。默认值为 release。
日志信息如下:

http://zjyun.cc/wordpress/wp-content/uploads/2022/11/build.log


执行make

这一步时间比较长,执行”
nohup make all >> make.log &
我这里执行的是makeall 所以时间会很长,执行成功后如下,如果有报错停止直接yum对应的提示包就行!
file
日志信息如下:
http://zjyun.cc/wordpress/wp-content/uploads/2022/11/make.log
成功之后今进入jdk 目录:
cd ./build/linux-x86_64-normal-server-slowdebug/jdk/bin/
执行
./javac
file
./java -version
file


FAQ

  • 在安装make all 结束之前,会报如下错误 不影响编译.
    [Error] encoded value was less than 0: encode(-8.326673E-17, 5.0, 11.0, 16.0)
    [Error] encoded value was less than 0: encode(-0.05882353, 1.0, 24.0, 25.0)
    [Error] encoded value was greater than 3: encode(15.029411, 1.0, 14.0, 15.0)
    [Error] encoded value was less than 0: encode(-0.05882353, 1.0, 24.0, 25.0)
    [Error] encoded value was greater than 3: encode(15.029411, 1.0, 14.0, 15.0)
    [Error] encoded value was less than 0: encode(-0.05882353, 1.0, 24.0, 25.0)
    [Error] encoded value was less than 0: encode(-0.05882353, 1.0, 24.0, 25.0)
    [Error] encoded value was greater than 3: encode(15.029411, 1.0, 14.0, 15.0)
    [Error] encoded value was less than 0: encode(-0.05882353, 1.0, 24.0, 25.0)
    [Error] encoded value was greater than 3: encode(15.029411, 1.0, 14.0, 15.0)
    [Error] encoded value was less than 0: encode(-0.05882353, 1.0, 24.0, 25.0)
    [Error] encoded value was less than 0: encode(-0.05882353, 1.0, 24.0, 25.0)
    [Error] encoded value was greater than 3: encode(15.029411, 1.0, 14.0, 15.0)
    [Error] encoded value was less than 0: encode(-0.05882353, 1.0, 24.0, 25.0)
    [Error] encoded value was greater than 3: encode(15.029411, 1.0, 14.0, 15.0)
    [Error] encoded value was less than 0: encode(-0.05882353, 1.0, 24.0, 25.0)