说java性能差,垃圾收集会造成stw,不存在的。别说现在的zgc和shenandoah,就是老掉牙的G1,停顿也就几毫秒到几十毫秒,对用户体验毫无影响,玩家肯定没卡的感觉。至于是出现fullgc的情况,那是代码有问题,合格的代码就不应该出现救命的fullgc
如果使用c#,性能会更好,你要是敢往死里优化,可以做到无GC,这点比java强得多
至于为什么c++多,关键看游戏类型
比如一些采用帧同步的游戏,dota、撸啊撸、王者之类的,因为游戏的特殊性,有一部分代码是需要客户端的服务器都可以运行的,也就是代码写好,即要能在客户端跑,也要能在服务器跑,比如一些战斗逻辑。
那采用什么技术方案?客户端Java+服务器java?不可能,先不说java能不能好好的做游戏客户端,尤其是3D的。服务器java也吃不消,moba类游戏和mmo不一样,mmo你卡几十毫秒卡顿没影响,moba在一些高手那里,几十毫秒就能定胜负了
至于采用客户端c#+服务端c#,那倒是可以,c#可以无GC,但那是unity起来之后的事情了,所以在零几年那会,c++开发实时性要求高的游戏的唯一选择。
而现在,有的游戏架构会多语言结合。我参与过的一个moba项目,客户端c#+lua+cpp,服务器go+cpp,为什么一定要有c++,因为有一部分代码客户端和服务器都要用
如果是现在,开发新游戏,不考虑使用复用旧代码库,客户端c#,服务端c#,是最好的,即有性能保证,代码又可以复用。比如某个库,客户端和服务端都可以用。