本帖最后由 紅葉 于 2022-1-29 17:22 编辑
GraalVM
新生代 JVM。
Eclipse OpenJ9
优缺点突出的 JVM。

鸣谢:
掷地有声


我不知道有什么优化办法,
能直接节约 43.3% 的内存占用,
或者是提升 36.9% 的cpu效率。
================================================================
为什么写这篇教程
优化是一个老生常谈的东西。
有些人使用过一些 调整jvm参数 的优化方案,
但是,有人想过直接更换 JVM 吗?
有哪种优化方案,能直接减少 40% 的内存占用?
有哪种优化方案,能直接提升 20% 以上的CPU效率?
================================================================
温馨提示
换JVM不仅针对服务器,对客户端也是有作用的。
换jvm之前,先考虑升级java吧。java16的gc一定比java11好,java11的gc一定比java8好
本篇教程虽然对于任何规模的服务器都会有帮助,
但是 <300人才能看出非常显著的作用,千人服还是多加点内存吧。
================================================================
各JVM介绍及场景示例
JVM,就是 Java虚拟机,是运行Java代码用的软件程序,关系着运行效率。
除官版以外,我挑选了一些已测评过,稳定且好用的版本介绍。
然后再介绍这些 JVM 适合的各种场景
JVM,就是 Java虚拟机,是运行Java代码用的软件程序,关系着运行效率。
除官版以外,我挑选了一些已测评过,稳定且好用的版本介绍。
然后再介绍这些 JVM 适合的各种场景
建议一个一个看完,因为我把好东西留在压轴了。
Hotspot
最寻常的JVM,它是本篇的参照物。
你在 java.com 和 oracle 官网下载的都会是它。实际上它可以算是“标准JVM”。
顺带一提,不知道为什么,Oracle的Hotspot比OpenJDK包含的Hotspot在CPU和内存效率上高些。
Hotspot
最寻常的JVM,它是本篇的参照物。
你在 java.com 和 oracle 官网下载的都会是它。实际上它可以算是“标准JVM”。
顺带一提,不知道为什么,Oracle的Hotspot比OpenJDK包含的Hotspot在CPU和内存效率上高些。
所以如果你坚持使用Hotspot,我建议你使用从Oracle官网下载的,而非从OpenJDK项目组下载的版本
数据(Hotspot 采用Oracle's测试):

================================================================
GraalVM
新生代 JVM。
我测了这个数据,但是不好,就没有推荐
但是有位大佬表示想看,所以我就也写一写
优点:
CPU效率 和 内存占用 比Hotspot有微弱优势
缺点:
内存占用 和 CPU效率 不稳定
详细的数据对比(与Hotspot):
提示:
我建议你看下面几个
Graal主要应用不是开mc服务器
它的提升主要在于把Java程序编译到native
但是不幸的是,minecraft服务器似乎不能。
下载:
================================================================
Eclipse OpenJ9
优缺点突出的 JVM。
由 Eclipse 基金会编译发行。
优点:
占用内存 极少,极少,极少。
经测试,在用于开mc服务器的时候,可以节省 30~40% 左右的内存。
你要不是用来开mc服务器还可以更变态:
缺点:
CPU性能比Hotspot 低。
GC渐渐不如Hotspot了,调优也赶不上。
有可能和某些插件 不兼容,比如momojs
OpenJ9的单线程优化比Hotspot差
详细的数据对比(与Hotspot):
推荐应用场景及方法:
说白了就是以降低 约10% CPU效率 的代价
换取降低 约30%~40% 内存占用
适合CPU性能足够,而内存不足的场景
如 2核2g,4核4g等 CPU核心:内存G数 = 1:1 的服务器
一般在 Linux 服务器上使用更好,可以启用它的 metronome gc
注意,OpenJ9不兼容Hotspot的一些JVM参数,你可能需要另外配置
我这里推荐站友一篇文章,他的参数我一直在用,效果较好:
当然你也可以用在客户端上,客户端缺内存的情况倒是挺多的。
这样能使更多渣配玩家畅快游玩你的服务器。
下载:
================================================================
Azul Zulu
CPU效率和内存效率都很高 的 JVM
由 Azul 公司编译发行,免费。人是专门搞 JVM 的公司。
优点:
完美兼容 Hotspot JVM
CPU占用和内存占用 极其稳定,
经测试,在用于开mc服务器的时候,
最多可以节省 20% 左右的内存,
同时提升了 10~20% 的CPU效率
传承 azul 家老手艺,gc 几乎无暂停
解释:gc指java虚拟机回收内存中垃圾
缺点:
无。
纯纯的各方面提升Hotspot。
详细的数据对比(与Hotspot):
推荐应用场景及方法:
任何场景下使用均比 Hotspot 好
如果你不是很缺内存,可以选择zulu
如果你 tps 低,zulu更能拯救你。
下载:
悄悄话:
但是azul的主打产品是zing vm,一个收费的大爹。
如果我把zing也拉到这篇测试里那其他的jvm都没有什么测的必要了。
不过zing收费都是几千几万的。。。我无法给你们推荐,我也买不起
================================================================
Alibaba Dragonwell
CPU效率和内存效率都 较高 的 JVM
由阿里巴巴公司编译发行,免费。
优点:
较为兼容 Hotspot JVM,不用担心兼容问题
CPU占用和内存占用 极其稳定,
即使进行大规模跑图、生成实体、tnt爆炸也 几乎无波动
经测试,在用于开mc服务器的时候,
节省 20~40% 左右的内存,
提升 10~30% 左右的CPU效率
缺点:
兼容性不如Zulu,有极少数插件不兼容(虽然我还没有遇到)
有些端的java检测有bug,尽管dw提供了java17版本,但是会要求java16..
详细的数据对比(与Hotspot):
推荐应用场景及方法:
大部分场景下使用比 Hotspot 好
内存占用减少 20%~40%
CPU效率提升 10%~30%
极其稳定,不用担心 tps 波动
下载:
我不推荐用java8 Release Alibaba_Dragonwell_8.7.7 · alibaba/dragonwell8 (github.com)
================================================================
换jvm方法
================================================================
全部测试数据
应某位同学的需求测试了Kona,FDK,但是暂时不作推荐了
毕竟FDK并不是很多人能获取到,Kona的性能不是非常好。

优化建议
================================================================
释疑
mspt是什么?
好好看文章。
每tick计算时间,一般与cpu性能有关,越小说明计算速度越快
是一个缩写,全称是 microsecond per tick,即 毫秒/游戏刻
为什么不给TPS,而给一个"mspt"为单位来衡量CPU效率?

你这个测试有没有水分?
我尽力保证。
采用相同服务器核心,没有加任何JVM优化参数,也没有调整服务端参数
每次测试都是生成好世界,然后重启几次预热的
同时数据我也是等待适当时间后取得的平均数据,防止极值干扰
不过因为生成世界可能不同等等原因,我不能保证100%的公平,请见谅。
你为什么不直接传附件?github下载老慢了。
我没有权限传一个一百多M的附件。
================================================================
什么?你还想要一些建议?
你选对了JVM之后还想要更多的优化?
你选对了JVM之后还想要更多的优化?
我建议你升级Java版本。
1.12.2及以前版本最高使用 Java8
1.13以上可以随意用,我建议你直接拉到 Java16
当然 Dragonwell 现在只有 11。。
为什么?因为高版本有更多的 gc 策略
回收内存的效率更高,这样也更节省CPU
同时高版本的 JVM 的 JIT 策略也更完善
同时有些插件已经编译到高版本的 Java
高版本 Jvm 可以运行低版本的 Java字节码,反过来不行
================================================================
到此就结束啦!
趣闻:
趣闻:
鸣谢:
声明:
本文中所有数据都是本人自己测量的。
数据仅供参考,我不能保证在任何环境下都是这个结果。
引用本文任何部分请注明来源。
如果本贴帮到了您,请您回复、评分或者分享给他人,
使更多人能看到这个教程,感谢您。
如果对本文数据有疑问,请回复本贴,我可能会提供解答。
为什么不at我 渣男 分手吧