Änderungen am Class-File Format:
Mustang bringt eine neue Form der Validierung von Klassen. Bisher wurden
Klassen vor der erstmaligen Ausführung in der VM mit einem zeit- und speicherintensiven
Verfahren verifiziert.
Die Verifizierung wird nun in zwei Phasen aufgeteilt: Beim Erzeugen der Klasse werden sogenannte “StackMap” Attribute gesetzt (Phase I), mit denen die Verifizierung zur Laufzeit (Phase II) wesentlich schneller ausgeführt werden kann. Ein StackMap Attribut beschreibt die möglichen Zustände des Stacks und der lokalen Variablen nach der Ausführung der Methode. Dieses Verfahren benötigt zum einen weniger Bytecode innerhalb der VM und zum anderen weniger Speicher im Verifizierungsprozess.
Diese neue Form der Validierung ist übrigens gar nicht so neu: Die Idee ist aus der J2ME-Spezifikation CLDC. Aufgrund der Speicher- und Resourcenbeschränkungen konnte die standardmässige Java-Verifizierung nicht im mobilen Umfeld eingesetzt werden, von daher musste ein neues Verfahren entwicklet werden, dass nun mit Mustang auch Einzug in die J2SE-Welt findet.
Allerdings birgt die Verifizierung über StackMaps auch potentielle Sicherheitslücken: Der polnische Sicherheitsexperte Adam Gowdiak konnte über die StackMap Attribute die Sandbox einer J2ME-VM umgehen und direkt auf native Methoden des Betriebssystems zugreifen. Siehe “Java 2 Micro Edition security vulnerabilities” (Achtung: PDF ist über 55MB gross!)