Гаразд, у цій темі багато дезінформації.
Я надзвичайно добре знаю ігровий бізнес , займаючись ним 25 років. Я також знаю Java в іграх надзвичайно добре, бо був технічним євангелістом Java від Java Ігр Sun та читав лекції експерта з програмування продуктивності Java.
З точки зору швидкості обчислень, Java сьогодні перемагає C ++ у багатьох наукових обчислювальних тестах. Ви можете написати патологічний код будь-якою мовою, яка погано спрацьовує, якщо ви хочете, але загалом, вони нарівні і є давно.
Що стосується використання пам'яті, у Java є деяка надмірна голова. HelloWorld - програма 4K в Java. Але ця накладні витрати є досить безглуздими в сучасних системах з декількома ГБ. Нарешті, у Java більше часу на запуск. Я б не рекомендував використовувати Java для коротких утиліт виконання, таких як команди командного рядка Unix. У цих випадках запуск буде домінувати над вашою продуктивністю. У грі, однак, це досить незначно.
Правильно написаний ігровий код Java не зазнає пауз GC. Як і C / C ++ код, він вимагає деякого активного управління пам'яттю, але не на рівні C / C ++. Поки ви зберігаєте використання пам'яті як для довгоживучих об'єктів (зберігаються на цілому рівні, чи для гри), так і для дуже короткотривалих об'єктів (векторів і подібних, переданих навколо та швидко знищених після обчислення), gc не повинно бути видимою проблемою.
Що стосується прямого доступу до пам'яті, у Java це було довгий час; з Java 1.4 у вигляді Native Direct Byte Buffers. Біт-подвійність у Java може бути дещо прикрою через відсутність неподписаних цілих типів, але робочі раунди всі добре відомі і не дуже важкі.
Хоча справжня Java ніколи не мала Direct3D-прив'язки, це тому, що технології Java прагнуть до портативності. Він має ДВІ прив'язки OpenGL (JOGL та LWJGL) та прив'язку OpenAL (JOAL) та переносну вхідну прив'язку (JInput), що підключається під кришкою до DirectInput в Windows, HID Manager на OSX та прив’язку Linux (я забуваю, які).
Це правда, що жоден повний ігровий движок не демонстрував Java, так як, скажімо, Unity, був показаний C #, і це слабкість у незалежному просторі. З іншого боку, існували два хороших сценарії APIS на рівні сцени, які повністю переносилися на платформу для Windows, OSX та Linux. Обидва написані Джошем Слаком, перший називався двигуном JMonkey, а другий - Ardor3D.
У верхньому плакаті виправдано, що дві найбільші речі, що стримували Java в розробці ігор, - це забобони та портативність. Останнє було найбільшим питанням. Хоча ви могли написати гру Java та відправляти її в Windows, OSX та Linux, ніколи не було консолі VM. Це було пов'язано із сумарною невмілістю середнього менеджменту ВС. Мало хто з нас, що працювали над Java в іграх, насправді мав угоди з Sony не менше 3 разів, щоб отримати VM на Playstation, і всі 3 рази середнє управління Sun вбило його.
Хоча Sun фліртував із клієнтськими технологіями, справа в тому, що управління Sun ніколи не отримувало споживчих товарів. Ось чому Java як клієнтська мова від Sun ніколи не виходила в будь-якій формі, і чому Google і Dalvik (Android-java-подібний VM) потребували Google, щоб досягти успіху на платформі Java де завгодно.
І тому я сьогодні кодую ігри на C #. Тому що Mono поїхала туди, куди керівництво Sun відмовилося.