吾先后编译过OpenJDK8/OpenJDK12,都有详细编译记录。解决了一些问题,同样觉得有两个问题急需解决:
- 各虚拟机之间的类共享。什么意思?比如说汝启动了两个虚拟机,都需要用到Test类,结果就加载两次。这太愚昧了……
- 垃圾收集。现在有shenandoah、zgc两种,效果都很好,结果OpenJDK8都没有。
这两个特性,实际上在最新版本的JDK中已经有了。可是目前用得最广泛的OpenJDK8没有啊。吾想自己动手,可是这样大的工程,显然不是个人简单动手就能解决的。公司目前也不可能支持吾搞这样的大项目。
晚上看了一个文章,说华为毕昇JDK把类数据共享(CDS)移植到JDK8,把zgc移植到JDK11:
https://blog.csdn.net/bjweimengshu/article/details/109589689
https://gitee.com/openeuler/bishengjdk-8
只支持LINUX/ARM。WINDOWS,别的CPU怎么办?好不好解决编译问题?吾试着在WINDOWS上编译了一下,果然不通过。错误如下:
C:\DEVELOP\bishengjdk-8\hotspot\src\share\vm\runtime\arguments.cpp(2178) : error C2057: 应输入常量表达式 C:\DEVELOP\bishengjdk-8\hotspot\src\share\vm\runtime\arguments.cpp(2178) : error C2466: 不能分配常量大小为 0 的数组 C:\DEVELOP\bishengjdk-8\hotspot\src\share\vm\runtime\arguments.cpp(2178) : error C2133: “buffer”: 未知的大小 NMAKE : fatal error U1077: “C:\progra~2\micros~2.0\vc\bin\amd64\cl.exe”: 返回代码“0x2”
测试JDK8的CDS,效果很一般,没有想象的那么好。也不知道什么原因。