Warum ist der Übersetzungsprozess für Java so besonders?

2 Antworten

Java Code wird zu byte-code kompiliert der von einer JVM (Java Virtual Machine) verstanden werden kann. Das heißt wenn du ein Java Programm startest wird zuerst die JVM gestartet die dann deinen Java byte-code für die jeweilige Plattform entsprechenden Maschinencode übersetzt.

Die JVM gibt es für fast alle Plattformen (Linux, MacOS, Windows, etc.), dadurch wird Java Plattformunabhängig. Mann muss nur einmal programmieren und es läuft auf jeder Plattform.

Das kompilieren des Java Codes wird gemacht hauptsächlich um die größe deines Programmes zu verkleinern.


Valentin1720653  14.09.2022, 20:35

Der letzte Satz ist nicht ganz richtig; Ja, die Quellcode-Dateien werden dadurch kleiner, das macht aber da es sich nur um Text und nicht um Grafiken handelt kaum einen Unterschied.

Der größere Vorteil ist dass dem Interpreter durch die Umwandlung in bytecode schon sehr viel Arbeit abgenommen wurde, die dann nicht zur Laufzeit gemacht werden muss.

1

Also da du nach einer kurzen Antwort fragst gehe ich jetzt mal nicht ins Detail.

Kompillierte und Interpretierte Sprachen sagen dir sicherlich etwas;

Kompilliert bedeutet in Maschinencode übersetzt, welcher direkt auf der CPU ausgeführt wird.

Interpretiert bedeutet dass ein Interpreter (sozusagen ein anderes Programm) den Quellcode einliest un direkt ausführt.

Bei Java ist es dagegen ein Mix aus beidem; Einerseits gibt es einen Java-Compiler, dieser übersetzt den Quellcode in sog. Bytecode, was für sich nichts ist als eine Befehlsliste für eine Virtuelle Maschine. Andererseits einen Interpreter, die Java-Runtime-Environment; Diese VM führt dann den Bytecode aus.

Du hast also swohol Kompiler als auch Interpreter, daher brauchst du um eine .jar (in Bytecode kompillierte Java-Datei) Datei ausführen zu können auch die Java-runtime-environment.

Die Idee dahinter ist die Vorteile von Interpretierten Sprachen mit den Vorteilen von Kompillierten Sprachen zu kombinieren.

Interpretierte Sprachen sind häufig langsamer als Kompillierte, da du nebenbei einen Interpreter hast, der durchgehend mitlaufen muss.

Kompillierte Sprachen haben das Problem dass sie, einmal kompilliert, nicht so einfach portierbar sind. Wenn du ein simples "Hello Wolrd" Programm in C++ auf einer Linux-Maschine kompillierst, so kannst du die a.out Datei nicht ohne weiteres auf einem Windows-Rechner laufen lassen.

Java macht jetzt bzw. Versucht jetzt das beste aus beidem zusammenzubasteln; Durch den Bytecode ist der eigentliche Quellcode schon sehr weit verarbeitet worden, sodass viele kompillierungsschritte nicht mehr zur Laufzeit durch einen Interpreter gemacht werden müssen (du hast ja schon eine "Art Maschinencode"), andererseits kann jeder eine bereits kompillierte .jar Datei ausführen, sobald er sich die Java Runtime Environment heruntergeladen hat (Und die Gehört eigentlich zu den "Grundprogrammen" eines Jeden Rechners)

Wie gut das funktioniert bei Java muss jeder selber wissen; So schnell wie zb ein C++ ist die Sprache definitiv nicht, aber schneller als ein Python auf jeden Fall.

Ich selbst mag Java nicht, was aber sehr schön an diesem System ist, ist dass die Java-Runtime-Environment ja nur stink normalen Bytecode einliest. Ob dieser von einem Java-Compiler kam oder nicht ist dabei komplett egal.

Das bedeutet, man kann einfach einen eigenen Compiler basteln, welcher Bytecode für die J.R.I erzeugt. Dann muss man nicht Java nutzen, sondern nur den vergleichsweise schnellen Interpreter.

Der Nachteil davon ist halt dass Oracle selbst weiß dass Java in 2022 nicht mehr die tollste Sprache ist, mit sehr vielen blöden Eigenschaften. Die Sprache hat eine ganze "Reihe" an Sprachen mit sich gezogen, die nur dafür gemacht wurden ein besseres Java zu sein (z.B Scala und Kotlin). Diese beiden Sprachen haben eine komplett andere Synthax (besser in meinen Augen) und deutlich neuere Features, laufen aber beide auf der J.R.I, und nutzen damit einen Teil der eigentlich für Java da ist.

Um das zu unterbinden spielt Oracle derzeit sehr stark mit der Lizenz von Java herum, und ich kann mir vorstellen dass das am Ende der Sprache den Kopf kosten wird ;)

So, war jetzt doch relativ lang :D

Lg Valentin


Valentin1720653  14.09.2022, 20:29

*es heißt natürlich J.R.E, nicht J.R.I.

Java Virtual Maschine (JVM) , Java Runtime Environment (JRE) und Java Developmend Kid (JDK)

0
regex9  14.09.2022, 20:37
@Valentin1720653

JDK steht für Java Development Kit. Und da ich schon herumkrittel: Die Programmiersprache heißt Scala.

1