公司的游戏服务器从 java8 升级到 java21 后带来的好处和问题!

131 天前
 lcingOnTheCake

给项目的游戏服务器从 java8 升级到了 java21 ,感觉实打实的好处有 2 个

第一个虚拟线程对 http 服务器性能的加持,有了虚拟线程,以前需要负载均衡处理来分散的并发问题,现在单节点就可以应付了。举个例子,如果原来的 http 服务线程池开 500 个线程,如果 http 处理程序中有 IO 阻塞操作,那么这个服务器的并发量就是 500 ,不能再多了。而实际上,因为是 IO 等待,服务器的 CPU 都是空闲的,但是却不能处理更多请求了,因为路就这么宽。有了虚拟线程后,这个限制就没了,来多少并发都没事,只要内存和 CPU 够就可以了。

第二个是分代 ZGC 。不能说原来的 G1 不好,但是 G1 有性能波动也是事实,STW 的时候停顿几十毫秒甚至几百毫秒还是挺常见的,对游戏服务器来说不友好。有了 ZGC ,STW 都是微妙级别了,超过 1 毫秒的都挺少,性能上很平滑稳定,对游戏服务器而言,是一个巨大的进步。

至于升级 java21 带来的问题,目前唯一碰到的恶心的问题是反射会出问题。这是由于 java9 开始对权限的控制变得严格了,原来通过反射访问 private 字段,现在需要模块导入了。作为一个临时的解决访问,在启动进程上加了,就解决了问题 --add-opens=java.base/java.util=ALL-UNNAMED
--add-opens=java.base/java.lang=ALL-UNNAMED \

升级 java21 还会带来什么好处或者问题,大家也可以分享下!

1645 次点击
所在节点    程序员
10 条回复
scmod
130 天前
--add-opens 真好用
Mrun
130 天前
现在游戏行业后端不还是 C++、lua 、golang 为主吗?
Rat3
130 天前
@Mrun 老项目很多 Java 的,最起码某个千万 dau 的游戏服务端是 Java (还是 8 )
Rat3
130 天前
私以为 VirtualThread 接口设计的很好,迁移成本很低,基本改几行代码就可以去测了
lcingOnTheCake
130 天前
@Meld 是的,基本没怎么费事就迁移到 21 了
Rat3
130 天前
@lcingOnTheCake 哥们在哪家?服务端用 java 的现在很少了,感觉都是熟悉的那几家
lcingOnTheCake
130 天前
@Meld 小公司,不是什么知名的游戏
Q2297045667
130 天前
@Mrun MC:你说得对,但我不同意
Q2297045667
130 天前
G1 在 MC 里面真的拉夸,然而,大多数人的启动参数却还是在用 G1
flowerains
127 天前
老项目一大堆 Java 的,别说 Java 了,到今天还一大堆页游后端是 PHP 的。

PHP 好多版本还停留在 7.0 ,可把我恶心坏了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1138201

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX