Cualquier máquina virtual Java contiene un verificador de clases que asegura que las clases cargadas tienen la estructura interna correcta. Si el verificador de clases descubre un problema dentro de una clase genera una excepción. Debido a que una clase es una secuencia de bytes, la máquina virtual no puede saber si una clase en particular es realmente un bytecode correcto o no. Como consecuencia de esto, todas las implementaciones de la máquina virtual disponen de un verificador de clases que puede ser invocado sobre clases no seguras, asegurando de esta forma su corrección.
Uno de los objetivos del verificador de clases es ayudar a obtener aplicaciones robustas. Si un programador malintencionado generara una clase que contuviera un método cuyo código en bytes incluyera una instrucción de salto al final del método podría causar que la máquina virtual no funcionara si el método es invocado.
La especificación recomienda que la verificación del bytecode de las aplicaciones se realice justo después de que la clase halla sido cargada. El verificador de clases lleva a cabo su tarea de comprobación en dos fases: