Я использую Java для написания игр, и я использовал C ++ для написания игр, и я обнаружил, что Java хорошо работает, если вы помните о сильных и слабых сторонах Java. Два больших преимущества для меня - программирование на Java - скорость разработки и возможность развертывания / переносимости. Время компиляции намного быстрее, чем в VC ++ (пока не могу говорить за XCode или Clang), что означает, что я могу решить проблемы намного быстрее. Кроме того, поскольку Eclipse постоянно компилируется, я делаю меньше ошибок типа опечаток. Я никогда не писал кусок кода C ++, который «просто работает» в другой системе или компиляторе. На Яве это норма.
С другой стороны, у Java есть некоторые существенные недостатки. Эффективность часто рассматривается как причина не использовать Java, но я обнаружил, что до тех пор, пока вы кодируете определенным образом, Java может работать довольно хорошо. Проблема в том, что определенный способ написания кода идет вразрез с тем, что многие люди Java считают хорошим дизайном.
В основе Java лежит «сборщик мусора», это система управления памятью. При написании эффективного кода вы хотите избежать динамического выделения каждого кадра на любом языке, и это особенно верно для Java. Если вы отключили сборщик мусора из-за неаккуратного new'ing, вы можете поцеловать сглаженную частоту кадров до свидания. Во-вторых (и что самое неприятное), Java не поддерживает пользовательские типы данных первого класса. Каждый пользовательский тип данных в Java создается по существу как указатель на класс, размещенный в куче. Это ужасно для параллелизма кеша, когда вы не можете иметь такие вещи, как массив объектов Vector3 и иметь их одновременно в памяти - вы можете иметь массив указателей Vector3, но это совсем не одно и то же. Обычно вместо этого вы должны использовать смещения в больших массивах примитивных типов.