Java-Bytecode enthält mehr Typinformationen als der Interpreter eigentlich benötigt, beispielsweise Symboltabellen. Dadurch kann zur Laufzeit sichergestellt werden, dass Java-Objekte und -Daten nicht unbemerkt manipuliert werden.
Vor und nach der Ausführung eines Java-Programms hat jeder Wert in dem Stackbereich und jede Variable einen bestimmten Typ. Man nennt dies den Typzustand der Ausführungsumgebung. Dieser Typzustand ist statistisch zu überwachen und kann dafür verwendet werden, Pfadangaben und Verzweigungen eines Programms zu verfolgen. Außerdem kann mithilfe der zusätzlichen Typeninformationen ein spezieller Java-Mechanismus aktiv werden, der Verifier genannt wird.
Man sollte unterscheiden zwischen dem Bytecode und dem Inhalt einer .class-Datei. Der Bytecode ist eigentlich nur die Befehlsfolge, aus der eine Methode aufgebaut ist. Die Class-Datei als ganzes enthält neben dem Bytecode aber auch Informationen über die Typen der Konstanten, Klassen- und Instanzvariablen, und lokaler Variablen von Methoden. Genaueres dazu steht hier: The class File Format
Informationen über die Typparameter von Generics sind aber in der Class-Datei nicht mehr vorhanden. Die Überprüfung der Gültigkeit von Zuweisungen, die auf den Typparametern von Generics basieren, finden ausschließlich zu Compilezeit statt. (Darum ist es auch nicht möglich, zur Laufzeit den Typparameter einer generischen Klasse zu bestimmen).