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