C++ vs Java / Wieso laggt Minecraft Bedrock nicht?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Die Version von Java ist weniger Performant, da sie erstens Singlethread ist, also nur auf einem CPU Thread ausgeführt wird, was auch Server für lags anfälliger macht. Außerdem benötigt Java noch Java selber und kann nicht direkt von einem PC ausgeführt werden. Dieser Prozess macht C als Programmiersprache performanter, da es auch Systemnah ist.

Was ich mir auch denke ist, dass die GrafikAPI die genutzt wird OpenGL ist und diese für Java weniger optimiert ist.

Es wird wohl aber noch viele weitere Gründe geben warum Java weniger Performant ist, welche auch ich nicht weiß.

Woher ich das weiß:Hobby – Setze mich mit Computer seid 2014 auseinander
Elomod 
Fragesteller
 23.12.2020, 02:16

Mit Abstand die beste Antwort, ich danke dir!

Ich Frage mich das eben nur weil, Mojang möchte Minecraft ja mehr und mehr nur zu einer EINZIGEN Version machen. Die Java Edition ist einfach das tollere Spiel für mich ABER ich möchte dort die Leistung von Bedrock haben. Kann man bei einem Spiel einfach so die Programmiersprache ändern?

LG

0
PartyGamerXXL  23.12.2020, 02:21
@Elomod

Danke für das Lob und zu deiner Frage: Hell No! Der Wechsel von Programmiersprache zu Programmiersprache kann je nach dem zu welcher du wechselst Riesig sein. Ein gutes Beispiel ist, wenn du Phyton und Java vergleichst.

Auch wenn Java und C gemeinsamkeiten hat ist ein Wechsel nicht so leicht möglich und es müsste alles von neu programmiert werden, vorallem, da die APIs ganz andere sind und anders aufgebaut sind je nach Sprache.

0
FireEraser  23.12.2020, 11:57
@Elomod

Eine direkte Übersetzung wäre mehr oder weniger möglich, aber das würde nicht viel bringen, vermutlich sogar weniger als die Optimierungen von Optifine. Aber selbst das wäre ein immenser Aufwand. Außerdem würde man damit so wie bei der Bedrock Edition die Modifizierbarkeit von Minecraft stark einschränken, was ein Hauptgrund für den Erfolg des Spiels ist (eine offizielle Schnittstelle oder gar komplett Open Source würde das beheben, aber es ist höchst unwahrscheinlich, dass das mit Microsoft am Steuer noch kommt).

0
FireEraser  23.12.2020, 11:49

Grundsätzlich ist das richtig, aber es fehlen noch ein paar Details:

  • Minecraft Java ist nicht ist nicht komplett single threaded, aber in es gibt z.B. nur einen einzigen Thread, der die Ticks berechnet (die gesamte Spiellogik, Physics, etc.)
  • Java ist zwar grundsätzlich etwas langsamer als C, aber das Hauptproblem ist, dass falsch mit Java programmiert wurde (Minecraft erstellt z.B. extrem viele kurzlebige Objekte, das ist v.a. bei Java 8 noch etwas problematisch)
  • OpenGL funktioniert mit Java so ziemlich genauso gut, aber es werde uralte Rendering Methoden verwendet (OpenGL 2.0 API)
0

Da werden ein paar Dinge zusammenkommen. Zum Beispiel:

  • Die C++-Variante war sozusagen eine Neuimplementierung auf der grünen Wiese (mit viel Budget). Da konnte man vieles strukturell verbessern, was beim ersten Wurf noch nicht so gut gelungen war. Das ist in der Softwareentwicklung häufig so, weil man erst im realen Betrieb draufkommt was besser klappt und was nicht so.
  • Java ist eine Sprache mit Garbage Collection (wie auch Python, C#, Swift...). D.h. der Entwickler muss sich nicht zwingend um die Verwaltung des Speichers kümmern. Das ist großartig und macht die Entwicklung viel einfacher. Aber es heißt nicht, dass Speicher nun gratis ist oder das Aufräumen nichts kostet. Beachtet man das als Entwickler nicht, leidet die Performance - obwohl die JVM so ziemlich die weltbesten GC-Implementierungen hat, kann sie nicht zaubern.
  • Und schlussendlich verwendet MC immer noch Java 8, eine wirklich alte Version. Neuere JVMs haben nochmal deutlich bessere GC-Algorithmen, die vor allem bei der gefühlten Performance helfen.
Elomod 
Fragesteller
 24.12.2020, 01:00

Und wieso Updated Mojang dann nicht auf eine neuere Java Version?

Danke für die ausführliche Antwort

0

Im Endeffekt ist Java mit JIT nicht zwingend langsamer, vor allem nicht allzu signifikant. Aber was beide unterscheidet:

Bei C++ liegt die Speicherverwaltung in der Hand des Entwicklers, während bei Java die GC diese Aufgaben übernimmt. Und selbige entscheidet auch darüber, wann bereinigt wird.

Alle sonstigen Performanceunterschiede gehen vermutlich auf schlechte Codequalität zurück.