Мир разработки игр забавен: с одной стороны, они часто быстро принимают новые идеи, с другой - они все еще находятся в каменном веке.
По правде говоря, редко бывает так много стимулов для перехода на .NET / Java / что-либо, кроме C / C ++.
Большинство игровых компаний лицензируют части игрового движка от других компаний. Эти части написаны на C ++, и, хотя у вас может быть доступ к исходному коду, чтобы вы могли его портировать, это требует больших усилий (и, конечно, лицензия должна позволять это).
Кроме того, много унаследованного кода уже существует в C ++. Если код из предыдущих проектов можно использовать повторно (скажем, если вы пишете сиквел), это еще больше значит, что нужно придерживаться того же языка, а не переписывать его на новом языке (тем более, что вы, вероятно, будете вводить заново). тонна жуков, с которыми вам придется потратить время на устранение.
Наконец, игры в любом случае редко пишутся на 100% C ++ - многое делается с использованием языков сценариев, независимо от того, являются ли они пользовательскими или просто интегрируют существующие языки (Lua является одним из самых популярных в наши дни).
Что касается сбора мусора, это может быть проблемой. Проблема не столько в том, что он существует, сколько в том, как он работает - сборщик мусора ДОЛЖЕН быть неблокирующим (или, по крайней мере, гарантированно блокировать его очень недолго), поскольку просто недопустимо останавливать игру на 10 секунд, пока он сканирует всю выделенную память, чтобы увидеть, что можно освободить. Я знаю, что Java имеет тенденцию задыхаться в GC'ing, когда она близка к исчерпанию памяти (и для некоторых игр это будет).
Вы также немного более ограничены в том, что вы можете сделать: вы не можете полностью использовать оборудование из-за накладных расходов времени выполнения. Представьте, что Crysis написан на Java ... даже если это единственное видимое отличие, оно не будет таким же (я также уверен, что вам понадобится Core i7 для его запуска).
Это не означает, что эти языки не имеют своего места в разработке игр - и нет, я не просто имею в виду программирование инструментов. Для большинства игр вам не нужна дополнительная производительность, которую вы получаете от C ++, включая 3D-игры, и если вы пишете все это с нуля, может иметь смысл использовать что-то вроде XNA - на самом деле, есть хороший шанс, что так и будет.
Что касается коммерческих игр - RuneScape считается? Это может быть самой успешной Java-игрой.