Відповіді:
Java працює у віртуальній машині, тоді як C ++ працює безпосередньо на апаратному забезпеченні. Це означає, що ви маєте більше контролю над тим, куди поділяється ваша пам'ять і що робиться з нею в C ++.
Java - мова, зібрана зі сміттям. Ви не маєте прямого контролю над своєю пам'яттю. Ви можете виділити нові шматки пам'яті, але у вас немає (тонкого) контролю над їх видаленням. Колекціонер сміття перевіряє кожен фрагмент пам'яті, який ви виділили для кожного x кадру, і визначає, чи це сміття чи все ще використовується.
Для ігор це може бути згубно. Кожні кілька кадрів якийсь збирач сміття приходить разом, щоб перевірити кожне виділене вами виділення, щоб побачити, чи воно все ще використовується? Говоріть про уповільнення!
По-друге, більшість бібліотек, якими ми користуємося, були або написані на C, або написані на C ++. Я говорю про Scaleform, фізику двигуна Havok, PhysX, SpeedTree тощо. Усі професійні пакети, що широко використовуються в галузі. Якщо інша мова хоче бути королем, то краще їх підтримайте.
Моя особиста думка полягає в тому, що Java справді приємна для настільних додатків і додатків, але не для ігор. У Java є багато приємних інструментів для розробників, і теоретично її можна запустити на будь-якій платформі, яка має реалізацію віртуальної машини Java, але я все ж віддаю перевагу C ++, тому що мені потрібен контроль над моєю пам'яттю. Особливо, коли ви починаєте працювати з екзотичними структурами даних (червоно-чорне дерево, подвійний список тощо), це допомагає зберегти хороший огляд усіх ваших розподілів пам'яті.
Я не кажу: не використовуйте Java. Я кажу: подумайте, чому ви використовуєте Java. Minecraft був побудований на Яві, тому, безумовно, можна будувати ігри на Яві. Але чи це була б краща гра, якби вона була побудована на C ++? Ну, це, звичайно, не було б таким дешевим, щоб запустити його на велику трійку (Windows, MacOS, Linux), але навіть так, у його розробці виникло багато помилок, пов’язаних з платформою, помилок, які Java не змогла згладити над.
Зараз для початківців-програмістів існує безліч фреймів С ++. Дійсно немає приводу не вчитися цьому, особливо якщо ви хочете продовжити свою кар’єру в галузі.
Коротка відповідь: C ++ компілюється в нативний код, тому продуктивність залежить від розробника, а не в режимі виконання або VM.
Довга відповідь:
Будучи "швидшим" C ++ не має нічого спільного з C ++. Наразі це одна з небагатьох доступних мов, яка підтримується інструментами, які створюють окремий, власний код для декількох платформ.
З того часу ви можете використовувати C, C ++, BASIC / 2, Delphi тощо, і отримувати ефективні, самостійно виконані файли. Вибір мови був питанням особистих уподобань та ринкових сил.
У наші дні припущення про те, що "C ++ швидше" - це, по суті, пророцтво, що самореалізується, хоча LLVM в змозі змінити це, оскільки воно робить все, що потрапляє в розбір спорів, як це було раніше.
Borland мав це правильно: кілька мов, які були проаналізовані, спершу застосовано оптимізацію, а потім перейшли до загального компілятора бекенда та лінкера. Це фактично одне з головних досягнень LLVM.
Java побудована таким чином, що без JVM було б важко реалізувати. Як не дивно, C #, звичайно і неправильно, вважається приблизно еквівалентним Java, вже компілюється в нативний код на декількох платформах, включаючи iOS.
Верх мого списку Різдва? Машина часу, щоб повернутися назад і додати властивості, реальні обробки винятків та фактичний РОБОЧИЙ поліморфізм на C ++ та позбутися від синтаксичного лайна стрілки f "d up, який аналізатор може розібратися самостійно. Я написав препроцесора за це 10 років тому, бо це дурно.