Bytecode
Einführung
Bei Kompilierung eines Quelltextes mancher Programmiersprachen oder Umgebungen – wie beispielsweise Java – wird nicht direkt Maschinencode, sondern ein Zwischencode, der Bytecode, erstellt. Ist der programmierte Quelltext frei von Syntaxfehlern, kann er vom Compiler in den Bytecode übersetzt werden. Bytecodes werden in Dateien mit der Endung .class gespeichert.
Die Java Virtual Machine (JVM) führt den Bytecode zur Laufzeit aus und übersetzt diesen für den jeweiligen Prozessor in Maschinensprache. Dabei muss die Virtual Machine für die jeweilige Rechnerplattform installiert sein.
Der Java-Compiler (javac) übersetzt Java-Quellcode in Java-Bytecode. Er liest den Quellcode aus Dateien mit der Endung .java und schreibt den Bytecode in Dateien, die auf .class enden. Die eigentlichen Dateinamen entsprechen dem Namen der zu übersetzenden Klasse.

Beispiel
Java-Quelltext in der Datei Bundesliga.java
public class Bundesliga
{
private String[] bundesligaTabelle;
public Bundesliga()
{
bundesligaTabelle = new String[18];
bundesligaTabelle[0]="FC Bayern München";
bundesligaTabelle[1]="Borussia Dortmund";
bundesligaTabelle[2]="Bayer 04 Leverkusen";
bundesligaTabelle[3]="FC Schalke 04";
bundesligaTabelle[4]="Eintracht Frankfurt";
bundesligaTabelle[5]="Sport-Club Freiburg";
bundesligaTabelle[6]="Borussia Mönchengladbach";
bundesligaTabelle[7]="Hamburger SV";
bundesligaTabelle[8]="Hannover 96";
bundesligaTabelle[9]="1. FSV Mainz 05";
bundesligaTabelle[10]="VfL Wolfsburg";
bundesligaTabelle[11]="VfB Stuttgart";
bundesligaTabelle[12]="1. FC Nürnberg";
bundesligaTabelle[13]="SV Werder Bremen";
bundesligaTabelle[14]="Fortuna Düsseldorf";
bundesligaTabelle[15]="FC Augsburg";
bundesligaTabelle[16]="1899 Hoffenheim";
bundesligaTabelle[17]="SpVgg Greuther Fürth";
}
public void gebeAlleVereineAufDerKonsoleAus(){
for(String verein:bundesligaTabelle){
System.out.println(verein);
}
}
public String[]sucheStadtMitBundesligaVerein(String stadt){
String[] trefferliste=new String[18];
int trefferZaehler=0;
for(int index = 0; index<18;index++){
String aktuellerVerein=bundesligaTabelle[index];
if(aktuellerVerein.contains(stadt)){
trefferliste[trefferZaehler]=aktuellerVerein;
trefferZaehler++;
}
}
return trefferliste;
}
}
Java Byte-Code in der Datei Bundesliga.class
Êþº¾ 3 Z
. 6. 7 . 8. 9. :. ;. <. =. >. ?. @. A. B. C. D. E. F. G. H. I. J K L
M N
. O. P. Q. .bundesligaTabelle. .[Ljava/lang/String;. .<init>. .()V. .Code. .LineNumberTable. .LocalVariableTable. .this. .LBundesliga;. .gebeAlleVereineAufDerKonsoleAus. .verein. .Ljava/lang/String;. .arr$. .len$. .I. .i$.
StackMapTable. .. .sucheStadtMitBundesligaVerein. '(Ljava/lang/String;)[Ljava/lang/String;. .aktuellerVerein. .index. .stadt. .trefferliste. .trefferZaehler.
SourceFile. .Bundesliga.java. . .. .java/lang/String. . .. .FC Bayern München. .Borussia Dortmund. .Bayer 04 Leverkusen.
FC Schalke 04. .Eintracht Frankfurt. .Sport-Club Freiburg. .Borussia Mönchengladbach. .Hamburger SV. .Hannover 96. .1. FSV Mainz 05.
VfL Wolfsburg.
VfB Stuttgart. .1. FC Nürnberg. .SV Werder Bremen. .Fortuna Düsseldorf. .FC Augsburg. .1899 Hoffenheim. .SpVgg Greuther Fürth. R. S T. U. V W. X Y.
Bundesliga. .java/lang/Object. .java/lang/System. .out. .Ljava/io/PrintStream;. .java/io/PrintStream. .println. .(Ljava/lang/String;)V. .contains. .(Ljava/lang/CharSequence;)Z ! . . . . . . . . . . . . .$ . . ª*· .*..½ .µ .*´ ....S*´ ....S*´ ....S*´ ....S*´ ....S*´ ... S*´ ....
S*´ .....S*´ .....S*´ .. .
S*´ ..
..S*´ .....S*´ .....S*´ ..
..S*´ .....S*´ .....S*´ .....S*´ .....S± . V .
. .
. . . . . % . - . 5 . = . F . O . X . a . j . s . | . … . Ž . — . © " ! . . ª " # . $ . . . ” . . #*´ .L+¾=.>..¢ .+.2:.² ...¶ .„..§ÿë± . . . % . & . % " ( ! 4 . . . % & . . . ' . . . . ( ) .
. * ) . # " # +
.þ
. ,..ø . . - . . . Ä . . 4..½ .M.>.6.....¢ #*´ ...2:...+¶ .™ .,...S„..„..§ÿÜ,° . & + . , . - . . . / $ 0 ) 1 , - 2 4 ! > . . . / & . . ' 0 ) . 4 " # 4 1 & . . . 2 . . . , 3 ) . + . .þ .. ,.. ú . . 4 . 5