Odpowiedzi:
Java działa na maszynie wirtualnej, podczas gdy C ++ działa bezpośrednio na sprzęcie. Oznacza to, że masz większą kontrolę nad tym, gdzie idzie twoja pamięć i co się z nią dzieje w C ++.
Java to język śmieci. Nie masz bezpośredniej kontroli nad pamięcią. Możesz przydzielić nowe fragmenty pamięci, ale nie masz (dokładnej) kontroli nad tym, kiedy zostanie ona usunięta. Moduł wyrzucania elementów bezużytecznych sprawdza każdy element pamięci przydzielony co x ramkom i określa, czy jest on używany, czy nadal używany.
W przypadku gier może to być katastrofalne. Co kilka ramek pojawia się jakiś śmieciarz, który sprawdza każdy przydzielony przydział, aby sprawdzić, czy nadal jest używany? Mów o spowolnieniu!
Po drugie, większość używanych bibliotek została napisana w C lub w C ++. Mówię o Scaleform, silniku fizyki Havoka, PhysX, SpeedTree itp. Wszystkie profesjonalne pakiety, szeroko stosowane w branży. Jeśli inny język chce zostać królem, lepiej go wspieraj.
Moim osobistym poglądem jest to, że Java jest naprawdę dobra dla aplikacji i aplikacji komputerowych, ale nie dla gier. Java ma wiele fajnych narzędzi dla programistów i teoretycznie można ją uruchomić na dowolnej platformie, która ma implementację wirtualnej maszyny Java, ale nadal wolę C ++, ponieważ potrzebuję takiej kontroli nad moją pamięcią. Zwłaszcza, gdy zaczynasz pracę z egzotycznymi strukturami danych (czerwono-czarne drzewo, podwójnie połączona lista itp.), Pomaga zachować dobry przegląd wszystkich przydzielonych pamięci.
Nie mówię: nie używaj Javy. Mówię: pomyśl o tym, dlaczego używasz Java. Minecraft został zbudowany w Javie, więc z pewnością można budować gry w Javie. Ale czy byłaby to lepsza gra, gdyby została zbudowana w C ++? Cóż, z pewnością nie byłoby tak tanie, aby uruchomić go na wielkiej trójce (Windows, MacOS, Linux), ale mimo to napotkał wiele błędów specyficznych dla platformy w rozwoju, błędów, których Java nie mogła wygładzić nad.
Istnieje mnóstwo frameworków C ++ dla początkujących programistów. Naprawdę nie ma wymówki, aby się jej nie uczyć, zwłaszcza jeśli chcesz kontynuować karierę w branży.
Krótka odpowiedź: C ++ kompiluje się do kodu natywnego, więc wydajność zależy od programisty, a nie od środowiska uruchomieniowego czy maszyny wirtualnej.
Długa odpowiedź:
C ++ będąc „szybszym” nie ma nic wspólnego z C ++. W tej chwili jest to jeden z niewielu dostępnych języków obsługiwanych przez narzędzia do tworzenia samodzielnego, natywnego kodu dla wielu platform.
Wcześniej można było używać C, C ++, BASIC / 2, Delphi itp. I uzyskać wydajne, wolnostojące pliki wykonywalne. Wybór języka był kwestią osobistych preferencji i sił rynkowych.
W dzisiejszych czasach założenie, że „C ++ jest szybszy” jest w gruncie rzeczy samospełniającą się przepowiednią, chociaż LLVM jest w dobrej sytuacji, aby to zmienić, ponieważ robi wszystko, co trafia do parsera, tak jak kiedyś.
Borland miał rację: przeanalizowano wiele języków, zastosowano najpierw optymalizacje, a następnie przekazano do wspólnego kompilatora i konsolidatora zaplecza. Co jest faktycznie jednym z głównych osiągnięć LLVM.
Java jest zbudowana w taki sposób, że wdrożenie JVM byłoby bardzo trudne. Co dziwne, C #, często i niepoprawnie, z założenia w przybliżeniu równoważny Javie, już kompiluje się z natywnym kodem na kilku platformach, w tym iOS.
Początek mojej świątecznej listy? Wehikuł czasu, aby cofnąć się i dodać właściwości, obsługę wyjątków i rzeczywisty polimorfizm WORKING do C ++, i pozbyć się bzdur składni strzałek w górę, które parser może sam zrozumieć. Napisałem preprocesor przez te 10 lat temu, bo to cholernie głupie.