Java nicht interpretiert

Bitte aktiviere JavaScript!
Hallo,

eigentlich habe ich gelernt das Java eine interpretierte (und kompilierte) Sprache ist.
Auch am Anfang des Buches "Java ist auch eine Insel" (und wahrscheinlich jedes Tutorials/Buchs/...) steht das Java in einen Bytecode (Maschinenunabhängigen) kompiliert und dann von der JVM interpretiert wird.
Auf der Konsole kann ich das ja auch nachvollziehen
Code:
?> javac MyTutorial.java
?> java MyTutorial
Aber jetzt steht dann im Buch:
Warum sich Sun für diese Teilung (--> in die Aufteilung in Referenz- und Primitive Datentypen) entschied, lässt sich mit einem einfachen Grund erkären: Java wurde als Programmiersprache entworfen, die kleine, schwache Geräte unterstützen sollte, und auf denen musste die Java-Software, die am Anfang noch interpretiert wurde so schnell wie möglich laufen.
Wieso am Anfang?
Das ist doch jetzt immer noch so.
 
Also Bytecode wird nicht nur interpretiert sondern es gibt weitergehende "Just in Time" Compiler. Die Wikipedia Seite hat das recht gut beschrieben:
"Um die Ausführungsgeschwindigkeit zu erhöhen, werden Konzepte wie die Just-in-time-Kompilierung und die Hotspot-Optimierung verwendet. In Bezug auf den eigentlichen Ausführungsvorgang kann die JVM den Bytecode also interpretieren, ihn bei Bedarf jedoch auch kompilieren und optimieren."
https://de.wikipedia.org/wiki/Java_(Programmiersprache)

Und diese Kompilierung (Mit Optimierung) ist heute eigentlich Standard. Daher kommt wohl diese Formulierung.
 
Interessant hier sei vielleicht noch zu erwähnen, dass auch im OpenJDK bzw. in HotSpot keine "Interpretierung" im engeren Sinne mehr stattfindet. Also, wenn man sich einen Interpreter als basically eine for-Schleife mit einem großen Switch-Case Statement für alle möglichen Bytecode-Instruktionen vorstellt und er dann Instruktion für Instruktion den Bytecode einer Methode liest und emuliert. Das passiert nicht mehr. Stattdessen nutzt zumindest HotSpot einen "templated interpreter". Hier wird bereits beim ersten Ausführen einer Methode Maschinencode generiert, der aber einfach nur aus vorgefertigten Maschinencode-Templates für alle Bytecode-Instruktionen besteht. Dieser sehr suboptimale Code wird dann einfach aneinanderkonkateniert für alle Bytecode-Instruktionen der Methode. Und erst bei einer konfigurierbaren Anzahl an Methodenaufrufen oder Schleifendurchläufen in der Methode wird die Methode Just-In-Time Kompiliert bzw. das bereits existierende Kompilat eher optimiert.

Mehr Infos: https://markmail.org/download.xqy?id=vn5olfue3yiwldjh&number=1
 
Weil Bytecode halt "am Anfang" (und mit Anfang ist hier 1995 gemeint) noch in BlueRay Playern und Set-Top Boxen interpretiert wurde. Heute aber eigentlich nicht mehr.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben