Хорошо, в этой теме много дезинформации.
Я очень хорошо знаю игровой бизнес , проработав в нем 25 лет. Я также очень хорошо знаю Java в играх, будучи техническим евангелистом Sun Java Game и лектором по программированию производительности Java.
С точки зрения скорости вычислений, Java превосходит C ++ во многих тестах научных вычислений сегодня. Вы можете написать патологический код на любом языке, который работает плохо, если хотите, но, в целом, они по номиналу и были в течение длительного времени.
С точки зрения использования памяти, у Java есть некоторые накладные расходы. HelloWorld - это программа 4K на Java. Но эти издержки довольно бессмысленны в современных системах с несколькими ГБ. Наконец, у Java больше времени запуска. Я бы не рекомендовал использовать Java для коротких служебных программ, таких как команды командной строки Unix. В этих случаях запуск будет доминировать в вашей производительности. В игре, однако, это довольно незначительно.
Правильно написанный код Java-игры не терпит GC-пауз. Как и код C / C ++, он требует некоторого активного управления памятью, но не до уровня C / C ++. Пока вы сохраняете использование памяти для долгоживущих объектов (сохраняющихся для всего уровня или игры) и очень недолговечных объектов (векторов и т. Д., Передаваемых и быстро уничтожаемых после расчета), gc не должно быть видимой проблемой.
С точки зрения прямого доступа к памяти, Java имела это в течение долгого времени; начиная с Java 1.4 в виде собственных прямых байтовых буферов. Переполнение битов в Java может немного раздражать из-за отсутствия целочисленных типов без знака, но рабочие циклы все хорошо известны и не слишком обременительны.
Хотя его настоящая Java никогда не имела привязки Direct3D, это потому, что технологии Java стремятся к переносимости. Он имеет две привязки OpenGL (JOGL и LWJGL) и привязку OpenAL (JOAL), а также переносимую привязку ввода (JInput), которая скрытно связана с DirectInput в Windows, HID Manager в OSX и привязку Linux (я забыл, какая).
Это правда, что ни один полноценный игровой движок не показал Java, как, например, Unity, показал C #, и это слабое место в независимом пространстве. С другой стороны, было два хороших APIS уровня Scenegraph, которые были полностью переносимы на платформу для Windows, OSX и Linux. Оба написаны Джошем Слэк, первый был назван движком JMonkey, а второй - Ardor3D.
Верхний постер прав, что две самые большие вещи, которые сдерживали Java в разработке игр, были предрассудки и мобильность. Последний был самой большой проблемой. Хотя вы могли бы написать игру на Java и поставить ее на Windows, OSX и Linux, консольной виртуальной машины никогда не было. Это было связано с полной неспособностью среднего звена Sun. Те немногие из нас, кто работал над Java в играх, на самом деле заключали с Sony сделки не менее 3 раз, чтобы получить виртуальную машину на Playstation, и все три раза средний менеджмент Sun убивал ее.
Хотя Sun заигрывает с клиентскими технологиями, факт заключается в том, что руководство Sun никогда не получало потребительские товары. Вот почему Java как клиентский язык от Sun никогда не преуспевала ни в какой форме, и поэтому потребовались Google и Dalvik (Java-подобная виртуальная машина Android), чтобы сделать Java платформой успешной в любом месте.
И именно поэтому я сегодня пишу игры на C #. Потому что Моно пошел туда, куда руководство Sun отказалось.