Bytecode ist ein Begriff aus dem Informatikbereich und wird im Zusammenhang mit einer virtuellen Maschine genutzt. Dieser spezielle Code stellt eine Befehlssammlung für die virtuelle Maschine dar. Nicht bei allen Quelltext-Kompilierungen wird ein Maschinencode erstellt. Für bestimmte Umgebungen und bei bestimmten Programmiersprachen wird ein Zwischencode benötigt. Der Zwischencode wird als Bytecode bezeichnet. Ein Beispiel für eine Programmiersprache, die einen solchen Code erstellt ist Java. Der Code entsteht nicht von realer Hardware abhängig, sondern wird durch eine semantische Quelltextanalyse erstellt. Während der Quelltext im Original schwer interpretierbar und lang sein kann, ist ein Bytecode im Vergleich kompakt. Des Weiteren kann der Code effizient interpretiert werden.

Programmiersprache und Quelltext

Programmiersprache ist ein Begriff, den viele Menschen kennen, aber nur wenige Menschen haben eine Vorstellung davon, was eine Programmiersprache bedeutet. Algorithmen und Datenstrukturen, auch als Rechenvorschriften bezeichnet, müssen formuliert werden, damit ein PC diese ausführen kann. Eine solche formale Sprache wird als Programmiersprache bezeichnet. Die Rechenvorschriften werden in schrittweise Anweisungen verpackt. Die entstehenden Muster (Textmuster) werden als Syntax bezeichnet. Die Programmiersprachen werden heutzutage mehr problemorientiert eingesetzt und nutzen, im Falle der höheren Programmiersprachen, maschinenunabhängige Ausdrucksweisen. Programme, die mit höheren Programmiersprachen geschrieben wurden, können automatisch in Maschinensprache umgewandelt werden. Über die Maschinensprache können die Programme ausgeführt werden. Der verwendete Programmcode wird auch als Quellcode oder Quelltext bezeichnet. Der Quelltext ist der lesbare Text des Programms, der in einer bestimmten Programmiersprache geschrieben ist. In der heutigen Zeit werden visuelle Programmiersprachen verwendet. Durch visuelle Programmierbaren kann das Programmieren erleichtert und der Zugang auch für Einsteiger in Programmiersprachen interessant gestaltet werden.

JVM – Java Virtual Machine

Java ist die Bezeichnung für eine Laufzeitumgebung und eine Programmiersprache. Eine sogenannte Laufzeitumgebung dient dazu, kompakte Programme zu erstellen, die auf nahezu jedem Betriebssystem laufen. Java kann daher nicht nur auf PCs genutzt werden, sondern wird auch bei Smart-TVs, Tablet-PCs, Smartphones und Servern eingesetzt. Auch Spielekonsolen verwenden Java.

JVM ist die Abkürzung für die virtuelle Maschine von Java, die Bytecode einsetzt. Der Bytecode wird in eine Maschinensprache übersetzt (Just-in-time-Kompilierung), die der jeweilige Prozessor eines Systems als Maschinencode-Routinen ausführt. Das Ergebnis der Just-in-time-Kompilierung wird auch als Kompilat bezeichnet. Das Kompilat benötigt, um ausgeführt werden zu können eine virtuelle Maschine (JVM) auf dem ausführenden Rechner.

Mehr zum Thema:
Was ist OpenVAS?

Bytecode und virtuelle Maschine

Durch einen Bytecode können mehrere Programmiersprachen für dieselbe virtuelle Maschine verwendet werden. Die Java Virtual Machine kann beispielsweise auch für Groovy, Java und Scala eingesetzt werden. Es können auch andere Programmiersprachen genutzt werden. Würde der Compiler eine direkte Übersetzung wagen und so einen Maschinencode für verschiedene Betriebssysteme bereitstellen, dann würde ein hoher Aufwand entstehen. Der Aufwand kann durch den Bytecode-Compiler reduziert werden, denn JVM und Kompilat laufen auf mehreren Architekturen und Betriebssystemen.

JVM und Bytecode – gibt es Nachteile?

Wird ein Bytecode von Ihnen genutzt, dann kann die Startzeit des Programms, das die virtuelle Maschine darstellt, negativ beeinflusst werden. Die Beeinflussung der Startzeit wird aber nicht so beeinträchtigt, dass der Nutzer es wahrnimmt. Während Startzeiten kaum reduziert werden, können Ausführungszeiten durch JIT-Compiler positiv beeinflusst werden. JIT-Compiler werden auch Just-in-time-Compiler genannt und sorgen dafür, dass Bytecode-Fragmente in Maschinencode-Fragmente übersetzt werden. Diese Übersetzung findet während der Programmausführung statt und kann die Ausführungszeit reduzieren.

Compiler und Decompiler

Compiler werden auch als Kompilierer bezeichnet. „Compile“ bedeutet „zusammentragen“. Ein Kompilierer trägt Quellcodes zusammen, die in eine definierte Form übersetzt werden. Die Quellcodes sind in einer bestimmten Programmiersprache geschrieben, die dann in eine von der jeweiligen Computerplattform ausführbare Variante übersetzt und direkt ausgeführt werden kann.

Der Decompiler wird auch Dekompilierer genannt und besitzt zudem die Bezeichnung Reverse Engineering Compiler oder Reverse Compiler. Es handelt sich dabei um ein Computerprogramm. Dieses Computerprogramm kann einen Maschinencode wieder in einen Quelltext umwandeln. Der Decompiler ist in der Lage, den Compiler-Vorgang umzukehren.

Dissassembler und Dekompilierer sind nicht dasselbe. Die sogenannte Assemblersprache wird auch als alternative Darstellungsform eines Maschinencodes bezeichnet. Normalerweise kann die Compilierung nicht umgekehrt werden, Dekompilierer übersetzen den Code quasi wieder in eine Version des Quelltexts, die Ähnlichkeit mit dem Ursprungsquelltext haben kann. Bestimmte Fragmente, wie beispielsweise Kommentare sowie die ursprüngliche Formatierung gehen bei der Dekompilierung verloren. Sogenannte Debuginformationen können allerdings nach der Dekompilierung wieder auftauchen. So können beispielsweise Module, Variablennamen und Funktionsnamen wiedergeholt werden.

Bytecode und Dekompilierung

Bytecode kann dekompiliert werden. Programme wie .NET und Java ermöglichen eine unkomplizierte Dekompilierung, während die Dekompilierung von Maschinencode in der Regel komplizierter ist. Bei der Dekompilierung bleiben Namen von öffentlichen Bezeichnern und Typinformationen erhalten. Dennoch ist der Programmcode nach der Dekompilierung der ursprünglichen Quelldatei nur ähnlich.

Mehr zum Thema:
Was ist eigentlich... OLED?
Letzte Artikel von Daniel Faust (Alle anzeigen)