JEP 539: inicialización estricta de campos en la JVM (vista previa)

Fuentes: JEP 539: Strict Field Initialization in the JVM (Preview)

El JEP 539, propuesto por Dan Smith en el repositorio OpenJDK, introduce un nuevo modelo de inicialización de campos en la Máquina Virtual de Java (JVM) denominado inicialización estricta de campos. Los campos marcados con este modo no dispondrán de valor por defecto (0, false o null), por lo que la JVM exigirá que sean inicializados de forma explícita en el bytecode antes de cualquier lectura; si además son finales, todas las lecturas devolverán el mismo valor. La marca ACC_STRICT_INIT (0x0800) en el fichero de clase identificará estos campos y el verificador de la JVM velará por su cumplimiento.

El objetivo es ofrecer a los diseñadores de lenguajes basados en la JVM un modelo con garantías de integridad más sólidas frente a errores provocados por valores por defecto malinterpretados o por la lectura prematura de campos finales durante la inicialización de la clase. El JEP no añade modificadores al lenguaje Java ni obliga a javac a aplicar la nueva estrategia sobre código existente: cada compilador decidirá qué campos declara como estrictamente inicializados.

La propuesta sienta las bases para dos funcionalidades futuras del lenguaje: las clases valor (JEP 401), cuyos campos finales deben observarse siempre con el mismo valor, y los campos con restricción de null (JEP 8303099), que nunca deben contener null como valor por defecto. Está clasificada como característica en estado Candidate, con alcance SE, esfuerzo medio y duración larga, revisada por Alex Buckley.