Java How To
 


Byte-Code-Versionen

How To ...

Wie verifiziert man die korrekte Version von Byte-Code (.class) und JVM?

Hintergründe

Nicht nur die Syntax der Sprache Java ist versioniert und ändert sich von Version zu Version, sondern auch der Byte-Code. Der Byte-Code ist in der Regel aufwärtskompatibel, nicht jedoch abwärtskompatibel.

Bei der Ausführung eines Java-Programms, das für eine neuere JVM compiliert wurde, als für die auf der es ausgeführt wird, bekommt man die Fehlermeldung:

 
  Exception in thread "main" java.lang.UnsupportedClassVersionError: ...
  (Unsupported major.minor version 49.0) 
		

So geht's

Zunächst ist es sinnvoll zu wissen, für welche JVM das Programm (die Klasse) compiliert wurde. Jede compilierte Klasse enthält die Versionsnummer der Ziel-JVM, die folgerndermaßen lautet:

Java-Version Byte-Code-Version
1.0 45.0
1.1 45.3
1.2 46
1.3 47
1.4 48
5.0 (1.5) 49
6.0 (1.6) 50
7.0 (1.7) 51

Dabei ist die Zahl vor dem Punkt die Major-Versionsnummer, die Punkt nach dem Punkt die Minor-Versionsnummer. Im obigen Beispiel zeigt die Exception die Version 49.0 an. Die Byte-Code ist also für die JVM 1.5 erzeugt worden. Das Ausführen auf einer JVM 1.4 und kleiner, führt zu einem Fehler.

Sie können nun entweder die JVM auf die neueste Version aktualisieren, oder, falls Sie keinen 1.5-spezifischen Code in Ihrem Programm verwenden, den Compiler anweisen, Code für eine 1.4-JVM zu erzeugen:

 
    javac -source 1.4 -target 1.4 Test.java