Okej, w tym wątku jest dużo dezinformacji.
Znam działalność gra bardzo dobrze, będąc w nim przez 25 lat. Znam też Javę w grach, będąc ewangelistą technicznym Sun Game firmy Java i wykładowcą specjalizującym się w programowaniu wydajności Java.
Jeśli chodzi o szybkość obliczeń, Java pokonuje obecnie C ++ w wielu testach naukowych w dziedzinie obliczeń. Możesz napisać kod patologiczny w dowolnym języku, który źle sobie radzi, jeśli chcesz, ale przede wszystkim są one na równi i działały przez długi czas.
Jeśli chodzi o wykorzystanie pamięci, Java ma pewne narzuty. HelloWorld to program 4K w Javie. Ale ten narzut jest dość bez znaczenia w dzisiejszych systemach z wieloma GB. Wreszcie Java ma więcej czasu na uruchomienie. Nie polecałbym używania Javy do krótkotrwałych narzędzi, takich jak polecenia wiersza poleceń systemu Unix. W takich przypadkach start będzie dominował w Twojej wydajności. W grze jest to jednak dość mało znaczące.
Prawidłowo napisany kod gry Java nie ulega przerwom GC. Podobnie jak kod C / C ++, wymaga aktywnego zarządzania pamięcią, ale nie do poziomu C / C ++. Tak długo, jak utrzymasz wykorzystanie pamięci do obiektów długo żyjących (trwających przez cały poziom lub grę) i bardzo krótko żyjących (wektory i takie, przekazywane i szybko niszczone po obliczeniach) gc nie powinno być widocznym problemem.
Jeśli chodzi o bezpośredni dostęp do pamięci, Java ma to od dłuższego czasu; od Java 1.4 w formie Native Direct Byte Buffers. Kręcenie się bitów w Javie może być nieco irytujące z powodu braku niepodpisanych typów liczb całkowitych, ale wszystkie rundy pracy są dobrze znane i nie strasznie uciążliwe.
Chociaż jego prawdziwa Java nigdy nie miała powiązania Direct3D, to dlatego, że technologie Java dążą do przenoszenia. Posiada DWA powiązania OpenGL (JOGL i LWJGL) i OpenAL (JOAL) oraz przenośne powiązanie wejściowe (JInput), które łączy się pod maską z DirectInput w systemie Windows, HID Manager w OSX i powiązanie z Linuksem (nie pamiętam, które).
Prawdą jest, że żaden kompletny silnik do gry nie zawierał Java w taki sposób, jak powiedzmy Unity, ma C # i jest to słabość w niezależnej przestrzeni. Z drugiej strony były dwa dobre APIS na poziomie Scenegraph, które były całkowicie przenośne dla platform Windows, OSX i Linux. Oba napisane przez Josha Slacka, pierwsze nazwano silnikiem JMonkey, a drugie Ardor3D.
Górny plakat ma rację, że dwie największe rzeczy, które powstrzymały Javę w rozwoju gier, to uprzedzenia i przenośność. Ten ostatni był największym problemem. Chociaż możesz napisać grę Java i wysłać ją na system Windows, OSX i Linux, nigdy nie było konsoli VM. Było to spowodowane całkowitą nieudolnością średniego kierownictwa firmy Sun. Nieliczni z nas pracujący nad Javą w grach faktycznie mieli umowy z Sony nie mniej niż 3 razy, aby uzyskać maszynę wirtualną na Playstation i wszystkie 3 razy średnie kierownictwo Sun zabiło ją.
Podczas gdy Sun flirtował z technologiami klienckimi, faktem jest, że zarząd firmy Sun nigdy nie otrzymał produktów konsumenckich. Właśnie dlatego Java jako język klienta firmy Sun nigdy nie odniosła sukcesu w żadnej formie i dlaczego Google i Dalvik (wirtualna maszyna Java podobna do Java) sprawiły, że Java odniosła sukces wszędzie.
I dlatego dzisiaj koduję gry w C #. Ponieważ Mono poszło tam, gdzie kierownictwo firmy Sun odmówiło.