Cuando hablamos de la evolución de Java, uno de los proyectos más interesantes (y menos comprendidos) es Project Valhalla.
Si alguna vez sentiste que Java es “pesado” por culpa de los objetos… este proyecto apunta directamente a eso.
Project Valhalla es una iniciativa dentro de OpenJDK cuyo objetivo principal es introducir:
Tipos de valor (Value Types / Inline Classes)
Esto permite representar datos sin el costo de los objetos tradicionales.
En Java, casi todo es un objeto… y eso tiene consecuencias:
Integer x = 10;
Esto implica:
- Heap allocation
- Indirección (punteros)
- Presión sobre el GC
- Mala localización en memoria (cache-unfriendly)
Incluso algo simple como una lista de enteros:
List<Integer>
Es en realidad:
List -> referencias -> objetos Integer
¿Qué propone Valhalla?
Valhalla introduce un nuevo tipo de clases: Clases inline (value classes)
Ejemplo conceptual:
value class Point {
int x;
int y;
}
Esto permite:
- Sin identidad (no == por referencia)
- Sin overhead de objeto
- Layout compacto en memoria
¿Por qué esto es importante?
Mejora de rendimiento
- Menos uso de heap
- Mejor uso de CPU cache
- Menos GC
Estructuras más eficientes
Ejemplo:
List<Point>
Con Valhalla podría ser:
[ x1, y1, x2, y2, x3, y3 ]
👉 En lugar de:
[ ref -> Point, ref -> Point, ref -> Point ]
Conceptos clave de Valhalla
Value Objects
- No tienen identidad, la identidad esta dada por su propio valor
- Son inmutables (conceptualmente)
- Se comparan por contenido
Flattening
El JVM puede “aplanar” estructuras:
class Line {
Point p1;
Point p2;
}
En memoria:
[x1, y1, x2, y2]
Specialized Generics (futuro)
Uno de los grandes problemas actuales:
List<int> ❌
List<Integer> ✅ (pero lento)
Valhalla busca permitir:
List<int> ✅
Sin boxing
Cambios importantes a tener en cuenta
- No todo será automáticamente value type
- Cambia el modelo mental (menos identidad, más datos)
- Impacta librerías y frameworks
Project Valhalla aún está en desarrollo activo.
No es parte estable de Java todavía, pero ya hay:
- Prototipos en OpenJDK
- Features en incubación
Veamos un ejemplo:
Antes (Java actual)
class Complex {
double re;
double im;
}
- Objeto en heap
- Referencias
Con Valhalla (ideal)
value class Complex {
double re;
double im;
}
- Datos contiguos
- Sin overhead
Project Valhalla busca algo muy ambicioso:
Combinar lo mejor de OOP con la eficiencia de lenguajes de bajo nivel
En otras palabras:
- Mantener la simplicidad de Java
- Reducir el costo de abstracción
En C# tenemos el struct que es muy similar a lo que busca Valhalla.

No hay comentarios.:
Publicar un comentario