Вопрос по java – Почему только несколько видеоигр написаны на Java? [закрыто]

170

Почему не так много коммерческих 3D-игр (не случайных 2D-игр с открытым исходным кодом), написанных на Java? Теоретически, это имеет большой смысл: вы получаете повышение производительности и кроссплатформенное приложение почти бесплатно, среди прочего, например, огромное количество библиотек Java и встроенную сборку мусора (хотя я допускаю, что я & apos; я не уверен, что последнее хорошо). Так почему это редко используется? Я могу только думать о паре популярных коммерческих игр, написанных для платформы Java.

Это из-за производительности? Если это так, не будет ли большая часть тяжелой работы выполняться ГПУ?

Runescape написан на Java. GameFreak
Minecraft написан на Java! daGrevis
Re: mmyers; Я немного шокирован тем, что эта игра выиграла «лучшую графику». награда, даже в 2005 году ... CloudyMusic
en.wikipedia.org/wiki/Tribal_trouble Michael Myers♦
Да, но большинство "настоящих игр" не сделаны в управляемом .net не так ли? Они сделаны в старой школе c / c ++? Hardwareguy

Ваш Ответ

22   ответа
153

с одной стороны, они часто быстро принимают новые идеи, с другой - они все еще находятся в каменном веке.

По правде говоря, редко бывает так много стимулов для перехода на .NET / Java / что-либо кроме C / C ++.

Большинство игровых компаний лицензируют части игрового движка от других компаний. Эти части написаны на C ++, и, хотя у вас может быть доступ к исходному коду, чтобы вы могли его портировать, это требует больших усилий (и, конечно, лицензия должна позволять это).

Кроме того, много унаследованного кода уже существует в C ++. Если код из предыдущих проектов может быть повторно использован (скажем, если вы пишете продолжение), это еще более важно в пользу того, чтобы придерживаться того же языка, а не переписывать его на новом языке (тем более, что вы, вероятно, будете вводить заново). куча ошибок, которые вам понадобятся, чтобы потратить время на устранение недостатков.

Наконец, игры в любом случае редко пишутся на 100% C ++ - многое делается с использованием языков сценариев, независимо от того, являются ли они пользовательскими или просто интегрируют существующие языки (Lua - один из самых популярных в наши дни).

Что касается сбора мусора, это может быть проблемой. Проблема не столько в том, что он существует, а в том, как он работает - сборщик мусора ДОЛЖЕН быть неблокирующим (или, по крайней мере, гарантированно блокировать его только очень кратко), поскольку просто недопустимо зависание игры. в течение 10 секунд, пока он сканирует всю выделенную память, чтобы увидеть, что можно освободить. Я знаю, что Java имеет тенденцию задыхаться в GC, когда она близка к исчерпанию памяти (и для некоторых игр это будет).

Вы также немного более ограничены в своих действиях: вы не можете полностью использовать аппаратное обеспечение из-за накладных расходов времени выполнения. Представьте, что Crysis написан на Java ... даже если это единственное видимое различие, оно просто не будет таким же (я также уверен, что вам нужен Core i7 для его запуска).

Это не означает, что эти языки не имеют своего места в разработке игр - и нет, я не просто имею в виду программирование инструментов. Для большинства игр вам не нужна дополнительная производительность, которую вы получаете от C ++, в том числе для 3D-игр, и если вы пишете все это с нуля, то может иметь смысл использовать что-то вроде XNA - фактически, так и есть; Это хороший шанс.

Что касается коммерческих игр - делаетRuneScape рассчитывать? Это может быть самой успешной Java-игрой.

Ну, очевидно, вы не будете запускать Crysis на JVM; черт, если вы закодировали эту игру на языке ассемблера, вам все еще нужен суперкомпьютер, чтобы запустить его на полных настройках. Но +1 за отличное понимание, спасибо. Sasha Chedygov
@JulianR может быть значительная рабочая нагрузка для подготовки и поддержания сцены, которая будет эффективно отображаться, поэтому язык и связанные с ним языковые накладные расходы имеют значение для графики.
Графика на самом деле имеет мало общего с языком. Физика, ИИ, да. Графика, нет.
Вы не можете сравнивать Unreal Tournament 3 или Crysis с Runescape. Если качество графики является проблемой, вам нужно придерживаться языка низкого уровня с минимальными накладными расходами. Конечно, для Indy или игр, где графика не является основным преимуществом, Java является отличной альтернативой C / C ++.
@GuiSim: для большинства игр качество графики НЕ является основным преимуществом. Я могу вспомнить лишь несколько игр, которые были созданы с учетом графики (в то время я думал о Crysis, но также и о Half-Life 2). Я не думаю, что большинство разработчиков игр так сильно заботятся о графике, если они "достаточно хороши". (аналогично большинству других игр). Sasha Chedygov
2

most of the heavy lifting is not handled by the GPU. There's still animation, physics, and AI hitting the CPU, all of which are very time-consuming.

Java doesn't exist on consoles, and consoles are a major target for commercial games. If you use Java on PC, you're eliminating your ability to port to consoles within reasonable time and budget.

Many of the more experienced coders in the game industry have been using C and C++ long before Java became popular. The two points above may contribute to this, but I expect that many professional game coders just don't really know Java all that well.

Someone else's point about middleware above was a good one, so I'm adding it to my answer. There's a lot of legacy code and middleware written specifically to link with C/C++, and last I checked Java doesn't have good interoperability. Using Java for most companies would involve throwing out a lot of code, much of which has been paid for in one way or another.

Вы можете использовать JavaCL, JOCL или APARAPI, чтобы выгрузить большую часть этого в графический процессор.
3

что и у Java, когда речь идет о высокой производительности 3D. Microsoft также вложила гораздо больше времени и денег в разработку библиотек, когда дело доходит до работы с тяжелыми трехмерными операциями.

(... лично я также думаю, что они имели дело с магией между DirectX и .NET)

4

почему веб-приложения также не написаны на C или C ++. Сила Java заключается в его сетевом стеке и объектно-ориентированном дизайне. Конечно, в C и C ++ это тоже есть. Но о более низкой абстракции. В этом нет ничего негативного, но вы не хотите изобретать велосипед каждый раз, не так ли?

Java также не имеет прямого доступа к оборудованию, а это значит, что вы застряли с API-интерфейсом любых фреймворков.

... и потерять мобильность, пока вы на это!
Java может вызывать собственный код через «JNI».
Вы действительно не теряете много переносимости, когда используете JNI. При условии, что вы все еще можете скомпилировать нативные библиотеки на платформах, которые вы хотите поддерживать, это в основном означает, что вам нужно только портировать / перекомпилировать 1% кода, а не весь. Вы по-прежнему получаете большую выгоду от переносимости Java.
8

что видеоигры требуют непосредственного знания аппаратного обеспечения, зачастую, и для многих архитектур действительно нет хорошей реализации. Это знание базовой аппаратной архитектуры, которая позволяет разработчикам выжать каждую унцию производительности из игровой системы. Почему вы тратите время на перенос Java на игровую платформу, а затем пишете игру поверх этого порта, когда вы можете просто написать игру?

редактировать: это означает, что это больше, чем "скорость" или «не имеют правильных библиотек»; вопрос. Эти две вещи идут рука об руку с этим, но это скорее вопрос "как сделать систему, подобную ячейке, т. Е. запустить мой код Java? нет действительно хороших java-компиляторов, которые могут управлять конвейерами и векторами так, как мне нужно ... & quot;

10

по которой Java и другие языки виртуальных машин не используются в играх, связана с сборкой мусора. То же самое относится и к .NET. Сборка мусора прошла долгий путь и прекрасно работает в большинстве типов приложений. Однако, чтобы выполнить сборку мусора, вам нужно приостановить и прервать приложение, чтобы собрать мусор. Это может вызвать периодическую задержку, когда происходит сбор.

Java имеет ту же проблему для приложений реального времени. Когда задачи должны запускаться в определенное время, это трудно сделать с помощью автоматизированной задачи, такой как сборка мусора.

Дело не в том, что Java медленная. Дело в том, что Java плохо справляется с задачами в реальном времени.

Это не 1990-е годы. Сборщики мусора довольно хороши сейчас, когда настроены на малую паузу.
Однако вы можете написать свой собственный планировщик для сборщика мусора, если вы собираетесь зайти так далеко, чтобы перенести Java в новую среду. Память должна быть восстановлена в любом случае, и в режиме реального времени вы можете выбрать, когда запланировать свой gc ... лучший из обоих миров. Я должен вернуться к тому, что нет особых оснований переносить Java на архитектуру, чтобы делать то, что вы хотите, чтобы она делала, когда C / C ++ уже делает это за вас. Ява светит в других местах.
1

написанные на платформе .Net, часто сильно оптимизированы для такой скорости, как прямой доступ к памяти и шине. .Net позволяет использовать C / C ++ и смешивать его с языками высокого уровня, такими как C #.

Студии разработки игр часто работают в тесном сотрудничестве с поставщиками оборудования, которые предоставляют доступ к интерфейсам своих продуктов низкого уровня. Это мир, где вы должны использовать ASM и C для связи с устройством. Виртуальная среда будет замедлять эти части программы.

Во всяком случае, современные 3D-игры на самом деле используют языки более высокого уровня. Часто вы найдете игровую логику, написанную на таких языках, как Lua или Python. Но ядро (ввод / вывод, потоки, планирование задач) типичной трехмерной игры будет написано на низкоуровневых языках в течение следующих 25 лет, или поскольку длинные устройства сами не позволяют абстрагирование и виртуализацию (что произойдет).

2

издатели хотят, чтобы их инвестиции приносили доход с низкой степенью риска. Как следствие, основное внимание обычно уделяется технологическим уловкам (за исключением), которые потребители будут покупать для получения надежной отдачи - это, как правило, поверхностные визуальные эффекты, такие как блики объектива или более высокое разрешение. Эти эффекты надежны, потому что они просто используют увеличение вычислительной мощности - они используют аппаратное увеличение / увеличение закона Мура. это подразумевает использование C / C ++ - java обычно слишком абстрагирован от аппаратного обеспечения, чтобы использовать эти преимущества.

27

что в .NET было (есть) много тех же проблем, что и в Java. Microsoft только что проделала лучшую работу по маркетингу для разработчиков с XNA :-)

@JoelMartinez: еще одно обновление: невозможно писать игры для XNA для Windows Phone 8.
Немного более старый вопрос, но просто для обновления, теперь вы также можете писать игры для XNA для Windows Phone :-)
XNA также позволяет развертывать ваше .NET-приложение в XBox. Я не видел ничего более гладкого для Java.
Вы также можете развернуть в Zune.
@TomA Теперь можно писать одноигровые игры для WP8.
53

отсутствие перегрузки операторов в Java делает всю математику, с которой вам приходится иметь дело, чтобы получить рабочий и графический конвейер, очень, очень раздражающей и трудной для чтения.

Все матричные умножения и аффинные векторы, с которыми вам нужно иметь дело, намного проще понять, если они находятся в правильно сформированных математических выражениях, а не в объектно-ориентированных выражениях, таких как

product = vector.multiply(projectionMatrix).dotProduct(otherVector);

Это просто ужасно. Математика не должна выглядеть так.

Наказать всех остальных за несколько плохих парней? Это одна из причин, почему я предпочитаю C #. Если мне действительно нужна перегрузка оператора, она есть.
Я помню, как в 96-м я думаю, что некоторые дизайнеры из Sun проводили презентацию по Java в Беркли. Уильям Кахан (en.wikipedia.org/wiki/William_Kahan) давал им дерьмо по этой самой проблеме. :)
@MMJZ: Как лямбда-выражения связаны с перегрузкой операторов? Sasha Chedygov
По сути, перегрузка операторов действительно подходит только для 2-3 различных ситуаций в дизайне ООП (Векторы, Матрицы, Комплексные числа). В большинстве других ситуаций оно слишком слабо определено и приводит только к небрежному коду, слабому синтаксису и плохой документации, даже от людей, которые знают, как его использовать. Я думаю, именно поэтому Sun решила не использовать его в Java, и я думаю, что это правильное решение.
я думаю, что есть веская причина не допускать перегрузку операторов на языке: запретить людям использовать его. это мощный инструмент и очень крутой для математики, но опасен для всего остального. Как ни ленивые кодеры, они склонны использовать его для сокращения кода, и в тот момент, когда люди начинают выполнять карту, умножающую итерируемую функцию, или даже когда все арифметические операции определены для функций, читаемость кода должна достичь 0. И да, я потратил значительное количество времени на перенос такого кода. Это выбор дизайна. и выбор дизайна всегда имеет тенденцию быть спорным.
7

вид гипероптимизированного кода C ++, который есть в движках Quake (Http: //www.co,demaestro.com/reviews/9 ), вы знаете, что они не будут тратить свое время на виртуальную машину.

Конечно, могут быть некоторые .NET-игры (какие? Я заинтересован. Есть ли какие-нибудь действительно ресурсоемкие / интенсивно использующие GPU?), Но я предполагаю, что это больше, потому что многие люди являются экспертами в технологиях MS и следуют Microsoft, когда они запустили свою новую технологию.

Да, и кроссплатформенность просто не в голове у компаний, занимающихся видеоиграми. Linux занимает лишь около 1% рынка, Mac OS - еще несколько%. Они определенно считают, что не стоит отказываться от технологий и библиотек, предназначенных только для Windows, таких как DirectX.

Кроссплатформенность - это не просто кроссплатформенность. Подумайте о PS3, Xbox 360, Wii.
"они не собираются тратить свое время на виртуальную машину".en.wikipedia.org/wiki/Quake_III_Arena#Virtual_machineКармак построил собственную игровую логику.
Это правда. Вы не видите много популярных видеоигр, портированных на Linux. :( Sasha Chedygov
Я определенно благодарен Кармаку за его приверженность как кроссплатформенному, так и открытому исходному коду. Я просто изложил то, что думает большинство компаний.
«Кроссплатформенность просто не в голове у компаний, производящих видеоигры» - Вот почему я полностью уважаю компании, которые это делают. :) Sasha Chedygov
12

Графический движок - C ++, а скриптовый и поведенческий - C # / Mono. Таким образом, в то время как C ++ предназначен для битов, критичных ко времени, другие вещи, такие как .interaction, игровая логика, AI - это объектно-ориентированный управляемый язык.

Еще одно замечание: Sims 3 печально известен своими низкими показателями даже на превосходных компьютерах.
а затем для версии Mac они помещают все это в модифицированную виртуальную машину Wine. Я думаю, что все еще быстрее, чем на прямой Java :-)
Это очень распространено в играх, довольно часто логика, которая не критична ко времени, написана на каком-то языке сценариев, обычно lua или python.
Хотя это не ванильный моно. ЕА нужна была специальная команда, работающая над собственным КЛР на полную ставку, чтобы она работала.
Wine - это не виртуальная машина, это библиотека времени выполнения, которая имитирует поведение библиотек времени выполнения Windows. Отсюда и название (Wine не эмулятор).
1

ющей / лицензированной кодовой базы, производительности и т. Д.

Одна вещь, которую я хотел бы добавить, состоит в том, что трудно переносить неприятные уловки DRM через виртуальную машину.

Также я думаю, что есть компонент hubris, где руководители проектов думают, что они могут создавать стабильный / надежный код на C ++ со всеми преимуществами, такими как абсолютный контроль над своими инструментами и ресурсами, НО без всех негативов, которые усложняют и тормозят их конкуренцию, поскольку мы "умнее, чем они".

4

неправильные представления о производительности и плохой оптимизации JVM. Я говорю неправильные представления о производительности, потому что есть некоторые порты Java игр C ++, которые работают быстрее, чем их аналоги C ++ (см. Jake 2). ИМХО, настоящая проблема заключается в том, что многие Java-программисты не уделяют столько внимания высокопроизводительной производительности, как простоте использования и понятности / поддерживаемости кода. Со стороны C / C ++ вы, по сути, кодируете язык ассемблера чуть более высокого уровня, и он настолько близок к аппаратному обеспечению, насколько это возможно, без написания на ассемблере или прямом машинном коде.

Если он "настолько близок к аппаратному обеспечению, насколько это возможно, без написания на ассемблере", то Java не сможет его превзойти, если только ваше кодирование не ужасно. Чем ближе вы подходите к оборудованию, тем быстрее вы сможете его получить.
12
Are there any good ports of gaming engines/libraries? Many C/C++ developers, particularly the ones on Windows (where most commercial games are written) are familiar with Visual Studio. There is no comparison in IDEs. In general, Java has been sold to businesses because of it's solid typing and it has a perception of not having memory management issues. And yes, Java still suffers from a perception that it is slow, and it's memory management is poor, and for games, it probably is ill-suited to the task. As stated in some of the other answers, garbage collection just isn't going to cut it when you are dealing with real-time high-performance requirements. Video games push CPUs and GPUs to their limits.
+1 за жирный текст. Люди, похоже, не понимают, что когда ваша игра работает на скорости 20 кадров в секунду, она часто привязана к оборудованию со скоростью 20 кадров в секунду. Он действительно хочет получить 30+ кадров в секунду ... но это не так.
Я не думаю, что это просто GC, который, хотя и с точки зрения производительности, является проблемой ... или даже в сочетании с фазой медленного запуска ... это общие проблемы с производительностью, но это только я.
Я думаю, что в этот момент я скорее согласен, чем в прошлом. Оптимизация JVM улучшена; однако в свете улучшений производительности в свободно типизированных языках, таких как JavaScript и другие, производительность Java в сравнении довольно непростительна. Есть много извинений за производительность Java. (но воспринимаемое исполнение в конце концов - это все, что имеет значение) & apos;
4

Список игровых движков в Википедии перечислены многие игровые движки вместе с языком программирования, на котором они написаны.

There are several Java game engines listed.

Нажав на некоторые ссылки, вы увидите примеры игр и демонстраций, написанных на Java. Вот пара:

Ardor3D Bytonic Software

Для определенных игр и ситуаций компромиссы Java могут быть приемлемыми.

Я знаю игрыexist которые написаны на Java. Но кроме Minecraft и Runescape, очень мало популярных коммерческих игр написано для платформы Java. Сколько названий ААА было написано на Java? А почему так мало? Отсюда и мой вопрос. Sasha Chedygov
94

The biggest problem is that Java is really slow. On a pure cpu / memory / display / communications level, most modern cell phones should be considerably better gaming platforms than a Game Boy Advanced. With Java, on most phones you are left with about the CPU power of an original 4.77 mhz IBM PC, and lousy control over everything. [...snip...] Write-once-run-anywhere. Ha. Hahahahaha. We are only testing on four platforms right now, and not a single pair has the exact same quirks. All the commercial games are tweaked and compiled individually for each (often 100+) platform. Portability is not a justification for the awful performance.

(источник)

Конечно, он говорил о мобильных платформах, но я обнаружил, что подобные проблемы с Java в целом происходят из C ++. Я скучаю по возможности распределять память в стеке / куче на моих собственных условиях.

Эта цитата была с 2005 года. С тех пор и технология Java, и мощность сотовых телефонов значительно улучшились. Сравнение игр для мобильных телефонов и игр для ПК - это сравнение яблок с апельсинами.
Я нахожу этот спор очень странным. Java ME - это не то же самое, что Java в Android, а также не то же самое, что Java на ПК. Java ME обычно полагался на производителей телефонов, чтобы придумать JVM. Некоторые хорошо поработали, некоторые нет. Неудивительно, что Кармак жаловался на них. У Android есть собственная виртуальная машина, которая не является JVM. И у него есть серьезные проблемы (с моей точки зрения). Oracle HotSpot VM полностью отличается от обоих случаев. Если люди сравнивают все эти вещи, я могу только заключить, что они не знают, о чем говорят.
Мне просто становится неловко, когда я читаю «Java очень медленная». Это как сказать, что спортивная машина стоимостью 50 тысяч долларов медленнее, чем спортивная машина стоимостью 100 тысяч долларов. Конечно, это медленнее, но в 90% случаев работа, которую он выполняет, все еще велика и стоит вдвое меньше;) Никакой пламенной войны не предполагается. Я согласен, что по вышеуказанным причинам Crysis и подобные игры не написаны на Java.
Джон Кармак сказал это. Дело закрыто.
@Chris Dail, это подчеркивает всю проблему с производительностью Java. Улучшена ли производительность Java? Нет, мобильные телефоны стали быстрее. Предполагается, что игры расширяют границы реализма и, следовательно, расширяют границы аппаратного обеспечения, а отбрасывание% 30-% 40 вашей производительности до того, как вы даже написали строку кода, недопустимо.
2

управляемый код вполне может делать 3d-игры, проблема в задних движках. В течение короткого периода времени в .Net появилась управляемая оболочка DirectX для DirectX 9 от Microsoft. Это было до абстракции, которая сейчас XNA.

.Net-игры дают полный доступ к приложениям DirectX. Лучший пример, который я знаю, это www.entombed.co.uk, который написан на VB.Net.

К сожалению, на стороне Java его серьезно не хватает - главным образом по той причине, что DirectX не доступен для Java, а программисты игр знают и понимают API DirectX - зачем изучать еще один API, когда вы вернетесь к DirectX?

1

что скорость все еще является проблемой. Кроссплатформенность станет проблемой, так как вы не знаете, какая 3d карта доступна, когда вы пишете код? Есть ли в Java что-нибудь для поддержки автоматического обнаружения 3d-возможностей? И я полагаю, что существуют инструменты, облегчающие перенос игры между wii, xbox и ps3, но я бы поспорил.

У ps3 есть java, через поддержку blue ray. Проверьте сайт bd-j.

0

«видеоигре». Тэг может не относиться конкретно к онлайн-игре, но у него есть достойные последователи.

Но слепое изложение вопроса приводит к предположению, что НИКАКИЕ игры не написаны на Java, а просто указывает на успешный случай, когда кто-то находится.
Извините, но это не совсем отвечает на мой вопрос. Sasha Chedygov
17

any productivity boost from Java is hypothetical. The syntax is almost identical to C++ so you're really just banking on savings from memory management and standard libraries. The libraries have little to offer games developers and memory management is a contentious issue due to garbage collection.

cross-platform "for free" is not as good as you think because few developers want to use OpenGL and several key platforms probably lack a good Java implementation or wrappers for their native libraries, whether for graphics, audio, networking, etc.

Но в основном проблема заключается в обратной совместимости. Разработчики игр перешли на C ++ из C и в C из сборки только потому, что путь миграции был плавным. Каждый тесно взаимодействует с предыдущим, и весь их предыдущий код можно было использовать на новом языке, часто с помощью одного компилятора. Поэтому миграция была настолько медленной или быстрой, насколько вам понравилось. Например, некоторые из наших старых заголовков, используемых сегодня, до сих пор#ifdef WATCOMC в, и я не думаю, что кто-либо использовал компилятор Watcom здесь в течение десятилетия или более. В старый код вкладываются огромные средства, и каждый бит заменяется только по мере необходимости. Этот процесс замены и обновления битов и кусочков из одной игры в другую далеко не столь практичен, если вы перешли на язык, который изначально не взаимодействует с вашим существующим кодом. Да, совместимость C ++ / Java возможна, но очень непрактична по сравнению с простым написанием «C с небольшим количеством C ++». или встраивание блоков asm в C.

Правильно заменить C ++ разработчиками игр & apos; Язык по выбору, он должен сделать одну из двух вещей:

Be easily interoperable with existing legacy code, thus preserving investment and maintaining access to existing libraries and tools, OR Demonstrably show up-front enough of a productivity boost that the cost of rewriting all your own code (or reworking the interfaces into reusable components that can be used from that language) is more than covered.

Субъективно, я не думаю, что Java отвечает ни одному из них. Язык более высокого уровня может встретиться со вторым, если кто-то достаточно смел, чтобы быть пионером. (EVE Online, вероятно, лучший пример того, как Python можно использовать, но который использует форк основного языка Python, многие компоненты C ++ для производительности и даже для довольно нетребовательной игры в современных условиях.)

Да, это правда, но в сражениях участвуют более 2000 кораблей на экране, более 2000 снарядов (ракеты с анимацией), взрывы и т. Д., Требующих высокой производительности графики. В любом случае, спасибо за подробный ответ, он все еще остается в силе.
Просто хочу добавить, что EVE Online - это «онлайн». космическая симуляция, в которой сражения между игроками 1000 против 1000 против игрока являются обычным явлением, что может быть расценено как сложный сценарий с точки зрения производительности. Хотя части, требующие высокой скорости, написаны на C / C ++, они все еще представляют интересное исследование проблем использования языка высокого уровня (Python) в играх.
@BillK - вы, кажется, неправильно прочитали. Я упоминал синтаксис только со ссылкой на «производительность». - не для "производительности". Это правда, что JIT-оптимизация могла бы сделать Java быстрее в теории, но это не происходит на практике, по крайней мере, в игровом программном обеспечении.
Однако следует помнить, что производительность в многопользовательских играх на стороне сервера измеряется слегка отличающимися показателями от производительности в однопользовательских играх на стороне клиента - первая больше связана с пропускной способностью, вторая - с задержкой.
Если вы думаете, что C & amp; Синтаксис Java одинаков и поэтому имеет отношение к производительности, вы действительно не понимаете, что происходит. Как мог C решить во время выполнения, что данная функция вызывается с одними и теми же параметрами неоднократно, и заменить весь вызов функции константой, сохраняя при этом вызов функции, когда в параметрах есть отклонение? Я не говорю, что среда выполнения всегда лучше или всегда хуже, просто она не имеет никакого отношения к синтаксису!
0

C/C++ for the game engine and all intensive stuff. Lua or Python for scripting in the game. Java - very-very bad performance, big memory usage + it's not available on Game Consoles(It is used for some very simple games(Yes, Runescape counts in here, it's not Battlefield or Crysis or what else is there) just because there are a lot of programmers that know this programming language). C# - big memory usage(It is used for some very simple games just because there are pretty much programmers that know this programming language).

И я слышу все больше и больше Java-программистов, которые пытаются убедить людей в том, что Java не медленная, она не медленная для рисования виджета на экране и рисования некоторых символов ASCII на виджете, для получения и отправки данных по сети (и это рекомендуется использовать его в этом случае (манипулирование данными сети) вместо C / C ++) ... Но это чертовски медленно, когда речь идет о серьезных вещах, таких как математические вычисления, распределение / манипулирование памятью и многое другое.

Я помню статью на сайте MIT, где они показывают, что C / C ++ может делать, если вы используете функции языка и компилятора: матричный множитель (2 матрицы), 1 реализация на Java и 1 реализация на C / C ++ с функциями C / C ++. и активированы соответствующие оптимизации компилятора, реализация C / C ++ была ~ 296 260 раз быстрее, чем реализация Java.

Надеюсь, теперь вы понимаете, почему люди используют C / C ++ вместо Java в играх, представьте себе Crysis в Java, в этом мире не было бы компьютера, который мог бы справиться с этим ... + Сборка мусора работает нормально для виджетов, которые только что уничтожили изображение но он все еще там кешируется и нуждается в очистке, но не для игр, наверняка у вас будет еще больше лагов при каждой активации сборки мусора.

Edit: Потому что кто-то просил эту статью, я искал в веб-архиве, надеюсь, вы удовлетворены ...MIT Case Study

И добавить, нет, Java для игр все еще ужасная идея. Всего несколько дней назад большая компания, которую я не назову, начала переписывать свою игруclient от Java до C ++, потому что очень простая игра (с точки зрения графики) отстала и обогревала ноутбуки i7 мощными видеокартами nVidia GT 5xx и 6xx (не только nVidia, суть в том, что эти мощные карты могут работать в настройках Max). большинство новых игр и не могут справиться с этой игрой) и потребление памяти было ~ 2,5 - 2,6 ГБ ОЗУ. Для такой простой графики нужен зверь машины.

Итак, это исследование доказывает, что для крупномасштабного умножения матриц Java проигрывает C, когда для доступа к данным используется доступ к двумерному массиву. Да, я бы тоже об этом догадался. И если это действительно проблема для вас, в чем я сомневаюсь, именно поэтому у вас есть JNI. Затраты на проверку границ для массивов в этой ситуации складываются, хотя его Java-код может быть оптимизирован для существенного улучшения результатов. Точно так же я подвергаю сомнению его понимание JIT, когда он заявляет: «более быстрая компиляция = не лучший сгенерированный код». Прочитайте спецификацию IBM, чтобы доказать обратное.
@bgroenks & quot; 100% & quot; - похоже, вы понятия не имеете о C / C ++ ... А при создании игры вы всегда можете использовать кроссплатформенную библиотеку (SDL и множество других) или фреймворк (например, Qt). Например: EA использует Qt для абсолютно всех игр, которые у них есть ... Qt НАМНОГО более кроссплатформенный, чем Java, и компилируется в нативный код.
Вы очень мало знаете о современной среде выполнения Java и виртуальной машине. Упомянутая вами статья более чем вероятна из десятилетия назад или более, конечно, никто не может знать, потому что вы ее не цитировали. Ваше восприятие Java устарело.
Я не вижу смысла в Java, когда у вас есть Qt. Я нахожу код Qt более понятным, более легким для понимания и сопровождения, чем код Java. Когда я спрашиваю своих друзей, почему они так боятся C ++, они всегда говорят мне, что они ненавидят указатели и стараются освободить память. Похоже, что многие люди не знают о shared_ptr в C ++ ... Для меня Qt и C # .NET / C ++ .NET - самое приятное для написания. Java-код обычно очень раздутый с обработкой исключений, обычно устаревшие библиотеки (Это хорошо работает в основном только на стороне сервера, но остальное ...) и часто устаревшая документация.
Java НЕ является плохим выбором для разработки игр. Есть много успешных игр, которые работают на Java. Как правило, вам нужна небольшая помощь от нативного кода (особенно с LWJGL и тому подобным), чтобы действительно получить наилучшие результаты. Но если мне нужно только перенести и перекомпилировать 1% моего кода, а не 100%, для меня это звучит очень здорово.

Похожие вопросы