Bytecode
Kurz: Bytecode ist ein kompakter, plattformunabhängiger Zwischencode, den ein Compiler erzeugt und eine virtuelle Maschine ausführt. Er liegt zwischen Quelltext und Maschinencode.
Genauer: Java-Programme werden zu .class-Dateien (JVM-Bytecode), C# zu IL für die CLR, Python zu .pyc-Dateien. Dank Bytecode läuft dasselbe Programm auf jedem System, auf dem die virtuelle Maschine installiert ist („write once, run anywhere“). Die VM führt den Code entweder interpretiert oder über JIT-Compilation aus.
Im Detail
import dis
def addiere(a, b):
return a + b
dis.dis(addiere)
# LOAD_FAST a / LOAD_FAST b / BINARY_OP + / RETURN_VALUE (je nach Python-Version leicht anders)javac Hallo.java # erzeugt Hallo.class (Bytecode)
javap -c Hallo # zeigt den Bytecode lesbar an
java Hallo # führt ihn auf der JVM ausVorteile
- Portabilität: Ein Bytecode für alle Plattformen.
- Sicherheit: Die VM prüft den Code vor der Ausführung und schränkt ihn ein.
- Optimierung zur Laufzeit: Die VM sieht, welche Stellen oft laufen, und beschleunigt sie.
- Mehrere Sprachen, eine VM: Auf der JVM laufen Java, Kotlin, Scala und Groovy; auf der .NET-CLR C#, F# und Visual Basic; auf der BEAM Erlang und Elixir (siehe Laufzeitumgebungen).
Im Gegensatz zu Maschinencode ist Bytecode nicht an eine CPU gebunden und deshalb meist etwas langsamer als nativer Code – ein Nachteil, den JIT-Compiler weitgehend ausgleichen.
Siehe auch: Compiler, JIT-Compiler, Interpreter, Assembly