给项目的游戏服务器从 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 还会带来什么好处或者问题,大家也可以分享下!
1
scmod 49 天前
--add-opens 真好用
|
![]() |
2
Mrun 49 天前
现在游戏行业后端不还是 C++、lua 、golang 为主吗?
|
![]() |
4
Meld 49 天前
私以为 VirtualThread 接口设计的很好,迁移成本很低,基本改几行代码就可以去测了
|
5
lcingOnTheCake OP @Meld 是的,基本没怎么费事就迁移到 21 了
|
![]() |
6
Meld 49 天前
@lcingOnTheCake 哥们在哪家?服务端用 java 的现在很少了,感觉都是熟悉的那几家
|
7
lcingOnTheCake OP @Meld 小公司,不是什么知名的游戏
|
![]() |
8
Q2297045667 49 天前
@Mrun MC:你说得对,但我不同意
|
![]() |
9
Q2297045667 49 天前
G1 在 MC 里面真的拉夸,然而,大多数人的启动参数却还是在用 G1
|
![]() |
10
flowerains 46 天前
老项目一大堆 Java 的,别说 Java 了,到今天还一大堆页游后端是 PHP 的。
PHP 好多版本还停留在 7.0 ,可把我恶心坏了 |