EMZETT.
Login

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 aus

Vorteile

  • 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