为什么只有少数视频游戏是用Java编写的?[已关闭]

2022-08-31 06:52:48

为什么没有很多商业的3D视频游戏(不是随机的开源2D游戏)用Java编写?从理论上讲,这很有道理:你几乎可以免费获得生产力提升和跨平台应用程序,其中包括大量的Java库和内置的垃圾回收(尽管我承认我不确定后者是否是一件好事)。那么为什么它很少使用呢?我只能想到几个为Java平台编写的流行商业游戏。

是因为性能吗?如果是这样,大部分繁重的工作难道不是由GPU完成的吗?


答案 1

游戏开发世界是一个有趣的世界:一方面,他们往往很快接受新的想法,另一方面,他们仍然处于石器时代。

事实是,切换到.NET/Java/C/C++以外的任何东西几乎没有那么多的动力。

大多数游戏公司从其他公司获得游戏引擎的一部分许可。这些部分是用C++编写的,尽管您可能可以访问源代码以便移植它,但这需要花费很多精力(当然,许可证需要允许它)。

此外,C++中已经存在许多遗留代码。如果以前项目中的代码可以重用(比如,如果你正在写续集),那么坚持使用同一种语言,而不是用一种新的语言重写它(更是如此,因为你可能会重新引入大量的错误,你需要花时间去消除。

最后,无论如何,游戏很少能以100%C++编写 - 无论是自定义还是只是集成现有语言,都使用脚本语言做了很多工作(Lua是当今更流行的语言之一)。

就垃圾回收而言,这可能是一个问题。问题不在于它的存在,而在于它是如何工作的 - 垃圾回收器必须是非阻塞的(或者至少保证只非常短暂地阻止),因为在扫描所有分配的内存以查看可以释放的内容时,让游戏冻结10秒是完全不可接受的。我知道Java在接近内存不足时往往会在GC'ing中窒息很多(对于某些游戏来说,它会)。

您在可以执行的操作方面也受到更多限制:由于运行时的开销,您无法完全利用硬件。想象一下《孤岛危机》是用Java编写的...即使这是唯一可见的差异,它也不会是相同的(我也非常确定你需要一个Core i7来运行它)。

这并不意味着这些语言在游戏开发中没有一席之地 - 不,我不仅仅指的是工具编程。对于大多数游戏,你不需要从C++(包括3D游戏)中获得的额外性能,如果你从头开始编写它,那么使用像XNA这样的东西是完全有意义的 - 事实上,它很有可能会。

就商业游戏而言 - RuneScape算数吗?这很可能是最成功的Java游戏。


答案 2

我认为约翰·卡马克(John Carmack)说得最好:

最大的问题是Java真的很慢。在纯粹的CPU/内存/显示器/通信水平上,大多数现代手机应该是比Game Boy Advanced更好的游戏平台。使用Java,在大多数手机上,您只能获得原始4.77 mhz IBM PC的CPU功率,以及对一切的糟糕控制。[...截图...]一次写入,随处运行。日航哈哈哈哈哈。我们现在只在四个平台上进行测试,没有一对具有完全相同的怪癖。所有商业游戏都针对每个(通常是100 +)平台进行了单独调整和编译。可移植性并不是性能糟糕的理由。

()

当然,他说的是移动平台,但我发现Java作为一个整体的类似问题来自C++背景。我怀念能够按照自己的条件在堆栈/堆上分配内存。


推荐