Articulo de referencia

Proyecto Valhalla (lenguaje Java)

En informática, Project Valhalla es un proyecto experimental de OpenJDK para desarrollar nuevas e importantes características del lenguaje para Java 10 y versiones posteriores. ...

En informática, Project Valhalla es un proyecto experimental de OpenJDK para desarrollar nuevas e importantes características del lenguaje para Java 10 y versiones posteriores. El proyecto se anunció en julio de 2014 y es una iniciativa experimental de Oracle , liderada por el ingeniero Brian Goetz. [ 1 ]

La página del proyecto [ 2 ] ofrece una descripción general, así como enlaces a borradores técnicos y versiones de acceso anticipado.

Características planificadas

Valhalla está incubando características y mejoras del lenguaje Java en estas áreas: [ 3 ] [ 2 ]

  • Clases y objetos de valor : objetos altamente eficientes sin identidad propia (valor de referencia).
  • Tipos con restricción de nulo y tipos anulables , y objetos con restricción de nulo: por ejemplo, usar ?o !después de la declaración de tipo para indicar si se permite o no el valor nulo.
  • Empaquetado primitivo mejorado : por ejemplo, para permitir código como List<int>.
  • Genéricos reificados : conservan el tipo real en tiempo de ejecución.

Estas funcionalidades requerirán cambios tanto en la sintaxis como a nivel de la máquina virtual.

Componentes del proyecto

El proyecto está organizado en varias JEP (Propuestas de Mejora del JDK):

  • Borrador JEP: Objetos de valor (Retirado) [ 4 ]
  • JEP 401: Clases de valor y objetos (Vista previa) [ 5 ]
  • JEP 402: Boxeo primitivo mejorado (Vista previa) [ 6 ]
  • Borrador del JEP: Genéricos universales (Retirado) [ 7 ]
  • Borrador de JEP: Tipos de clases de valores con restricción de valores nulos (Vista previa) [ 8 ]

Clases de valor

Las clases de valor son tipos de referencia, al igual que todas las clases Java existentes. Sin embargo, renuncian a la capacidad de tener identidad. Esto significa que el operador compara las instancias de la clase de valor por la igualdad de sus componentes, en lugar de por la identidad. Además, la sincronización en instancias de clases de valor fallará.==

Las clases de valor aún admiten , ya que son tipos de referencia. Se espera que la Máquina Virtual de Java pueda aprovechar las restricciones adicionales de las clases de valor para eliminar la asignación de tipos de valor en el montón en la gran mayoría de los casos. Sin embargo, almacenar instancias de clases de valor en un campo o convertirlas a una interfaz seguirá requiriendo una asignación.null

Los tipos existentes en la API de Java, como se conocen como clases basadas en valores, son candidatos para convertirse en clases de valor en una futura versión del JDK.java.util.Optional

Clases primitivas

Las clases primitivas están sujetas a todas las restricciones de las clases de valor, pero no son tipos de referencia. Esto significa que renuncian a la capacidad de admitir . En cambio, sus valores predeterminados son el valor cero para cada uno de los tipos componentes ( para tipos numéricos, para booleanos, para tipos de referencia y el valor cero para clases primitivas anidadas).null0falsenull

Todas las clases primitivas se almacenan "en línea", es decir, sin necesidad de asignación de memoria dinámica. Los arreglos de clases primitivas no requerirán una indirección de puntero desde el arreglo al montón. Cuando sea necesario, se insertarán conversiones para "encapsular" la clase primitiva en una versión de clase de valor de sí misma y viceversa.

import java.util.ArrayList ; import java.util.List ;// List<int> en lugar de List<Integer> List < int > intList = new ArrayList <> ();intList.add ( 10 ) ; intList.add ( 20 ) ;System.out.printf ( "Lista de enteros: %s % n " , intList ) ;// List<double> en lugar de List<Double> List < double > doubleList = new ArrayList <> (); doubleList . add ( 3.14 ); doubleList . add ( 2.718 );System.out.printf ( " Lista doble: %s% n " , doubleList ) ;

Clases para los elementos primitivos básicos

Este JEP tiene como objetivo expresar los tipos primitivos clásicos de la Máquina Virtual Java ( byte, char, short, int, long, boolean, float, double) como clases primitivas.

Tradicionalmente, los ocho tipos primitivos se tratan por separado de todos los demás tipos. Proporcionar declaraciones de clases primitivas a partir de ellos elimina gran parte de este tratamiento especial, lo que da como resultado un sistema de tipos más elegante y fácil de entender .

Beneficios e implicaciones técnicas

El rendimiento del acceso a la memoria y la eficiencia del acceso a valores "encapsulados" son áreas clave que deben abordarse con estas características. Las características de "Tipo de valor" y la "Especialización genérica" ​​(cuando se aplican a listas o colecciones) reducen el uso de memoria, pero, lo que es más importante, evitan la indirección de punteros, que suele provocar un fallo de caché. [ 9 ] [ 10 ]

En lugar de una lista o matriz de referencias a objetos que apuntan a valores de datos dispersos por toda la memoria, las mejoras del Proyecto Valhalla permitirán que los valores de la lista o matriz se organicen potencialmente de forma lineal, sin indirección, como un bloque de memoria consecutivo.

Los tipos de valor se conciben como "¡Codifican como una clase, funcionan como un entero!" [ 11 ] La sincronización y la herencia se excluirían para los tipos de valor. Estos ya no requerirían identidad de objeto ni sobrecargas de memoria/puntero asociadas, aunque podrían adoptar una forma "encapsulada" para compatibilidad. [ 10 ]

Brian Goetz, el ingeniero detrás del Proyecto Valhalla, sugirió que la sobrecarga de operadores podría agregarse a Java después de la introducción de los tipos de valor. [ 12 ]

Véase también

Referencias

  1. Goetz, Brian. "¡Bienvenido a Valhalla!" . Archivo de correo de OpenJDK . OpenJDK . Consultado el 12 de agosto de 2014 .
  2. 1 2 "Proyecto Valhalla" . openjdk.org . Consultado el 28 de febrero de 2026 .
  3. Evans, Ben. "Oracle lanza el proyecto Valhalla para Java" . InfoQ . InfoWorld . Consultado el 12 de agosto de 2014 .
  4. "Borrador de JEP: Objetos de valor (Vista previa)" . Archivado del original el 30 de junio de 2022. Consultado el 28 de febrero de 2026 .
  5. "JEP 401: Clases de valor y objetos (Vista previa)" . openjdk.org . Consultado el 28 de febrero de 2026 .
  6. "JEP 402: Enhanced Primitive Boxing (Vista previa)" . openjdk.org . Consultado el 28 de febrero de 2026 .
  7. "Borrador de JEP: Genéricos Universales (Vista Previa)" . openjdk.org . Consultado el 28 de febrero de 2026 .
  8. "Borrador de JEP: Mejoras en el almacenamiento de objetos de valor (Vista previa)" . Archivado del original el 25/09/2023 . Consultado el 28/02/2026 .
  9. Krill, Paul. "Propuesta de la próxima generación del Proyecto Valhalla; los tipos de valor, la especialización genérica y las variables volátiles mejoradas encabezan la lista de deseos para el Proyecto Valhalla" . JavaWorld . InfoWorld . Consultado el 12 de agosto de 2014 .
  10. 1 2 "¿Tipos de valor y List<int> llegarán en Java 10 ?" . LiterateJava.com . Consultado el 12 de agosto de 2014 . 
  11. Rose, John; Goetz, Brian; Steele, Guy. "Estado de los valores" . OpenJDK . Consultado el 12 de agosto de 2014 .
  12. @BrianGoetz (11 de enero de 2017). "Primero los tipos de valor, luego podemos hablar de ello" ( Tweet ) vía Twitter .
  • Incubadora de Java para explorar tecnologías para Java 10 y versiones posteriores - JavaWorld
  • ¿Tipos de valor y List<int> llegarán a Java 10? - LiterateJava.com
  • OpenJDK - Proyecto Valhalla