2020年年初,公司CTO要求我们采用最新版本jdk,甚至直接使用最新版kotlin。前两天(2020年12月),我把公司代码升级到了jdk11 LTS版本,但不是最新版jdk。
如果不搞rocketmq,不会发现什么问题,而且会感觉这是一个很好的改进,编码写法改进了,甚至性能提高了……
然后,一搞rocketmq,发现:不说jdk11,甚至jdk9都无法让最新版的rockemq起起来。
回想一下,这几年,各个大厂都推出了自己的jdk版本,华为有自己的jdk、阿里有自己的jdk,但殊路同归的是都用的是jdk1.8这个版本。要想用大厂优化过的jdk,或者要想用大厂出品的部分组件,你就得考虑你的jdk版本是否基于1.8的版本,比如:rocketmq。
我一直在想为什么要从jdk1.8升级到jdk11或者jdk14、15,难道jdk1.8不香吗?
个人认为:jdk1.8依旧很香。因为,jdk1.8已经经过了6年的补丁修复,而Oracle是注重口碑的大厂,它不会让jdk1.8在补丁修复中加入新的漏洞。而jdk12、13、14才经过两三年的维护,你知道jdk12、13、14或者jdk15中未修复的bug有多少吗?你知道jdk15中未发现的漏洞有多少吗?至少,我不知道。而,各个大厂更直接:推出了各自维护的jdk1.8的版本,并向openjdk贡献代码,这使得jdk1.8的漏洞更少,虚机也会更稳定。所以,我的建议是服务器环境依旧采用jdk1.8,而不是冒进采用最新版jdk。
仅此发表一下本人的见解,仅此而已,并无他意。
2020年12月12日下午补充:
下午,调研后发现,经过这1年,2020年各大厂已经基本都推出了jdk11的LTS版本,而且已经经过了半年以上的时间的检验,除了腾讯以外,各大厂基本都已开源各自的jdk11版本:
腾讯开源依旧Kona8,华为已有毕昇11,阿里已有Dragonwell 11,亚马逊已有Corretto11和15,Eclipse基金会已有AdoptOpenJDK11和15,Redhat也已有自己的jdk11版本。
目前来看,完全可以采用jdk11了。当然,我的想法还是LTS版本的jdk11,而不是最新版本的jdk。
而,rocketmq问题,如果不是源码开发,就只能暂时安装两个jdk(jdk8和jdk11)或者单独搭建一台装有jdk8的服务器或者搭建一个jdk8的docker镜像来解决了,这可以抛给运维人员了。
当然,作为小厂,我的想法依旧是只采用大厂用过没有问题或者已有解决方案的LTS版本,而不是最新版本。
最后,上jdk11(LTS)吧,同志们,大厂都有版本了,而且已经检验了一年了。