Novedades en JDK 20
Tags: java, spanish, programming, news
Published: 2023-03-22 18:32:22

Como ya nos hemos acostumbrado, el nuevo kit de desarrollo de JAVA ha llegado puntualmente. Esta es la entrega número 11 desde que se anunció que habría entregas cada 6 meses. 

Esta nueva versión incluye mejoras generales en rendimiento, la estabilidad y la seguridad. Puedes descargarla desde [sitio oficial de Oracle](https://www.oracle.com/java/technologies/downloads/) o desde [OpenJDK](https://jdk.java.net/20/).

## Road to JAVA21
Esta entrega de JAVA es especial, ya que es la última antes de la llegada de JAVA 21, la próxima versión LTS del lenguaje y sus herramientas. Por lo tanto, mucho de lo veamos en la versión 20 se verá en la próxima versión, la 21, que deberíamos ver en 6 meses más y que también será LTS.

El sucesor de JAVA 17 vendrá después de 2 años del lanzamiento de la última versión de soporte a largo plazo. Así se cumple la promesa que Oracle nos ha hecho de reducir el tiempo entre entregas LTS de 3 a 2 años.

## JAVA 20 se construye entre todos
A través de la comunidad de OpenJDK, múltiples organizaciones han sumado esfuerzos para mejorar el lenguaje y su ecosistema. Por ejemplo, de los 21.604 problemas registrados como solucionados entre Java 11 y Java 20, 15.420 fueron registrados por Oracle, mientras que lo otros 6.184 fueron solucionados por otras organizaciones.
Entre las principales contribuyentes de soluciones después de Oracle, se encuentran organizaciones como Red hat, SAP, Google, Tencent, ARM, Amazon, Intel, IBM, entre otras.

![fuente: https://inside.java/2023/03/21/the-arrival-of-java-20/](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zqokpotgjdl18i7pw8c9.png)

## Novedades de JAVA 20
Esta versión de Java trae muchas mejoras en el rendimiento y la seguridad, pero hay 7 mejoras principales que destacan:

JEP 429: Scoped Values (Incubator)
JEP 432: Record Patterns (Second Preview)
JEP 433: Pattern Matching for switch (Fourth Preview)
JEP 434: Foreign Function & Memory API (Second Preview)
JEP 436: Virtual Threads (Second Preview)
JEP 437: Structured Concurrency (Second Incubator)
JEP 438: Vector API (Fifth Incubator)

Estas propuestas de mejoras del JDK (JDK Enhancement Proposals), también conocidas como JEP, se dividen en dos categorías. Las 'preview' están totalmente especificadas e implementadas en el lenguaje, pero se publican para recibir comentarios de los desarrolladores sobre casos de uso del mundo real antes de convertirse en una parte permanente del lenguaje o sus herramientas. Los módulos 'incubadora' permiten poner APIs y herramientas no finales en manos de los desarrolladores para recibir comentarios.

Estas propuestas de mejora se han trabajado en 3 proyectos diferentes: el proyecto _Amber_, el proyecto _Panama_ y el proyecto _Loom_.

## Proyecto Amber
**[JEP 432 – Record Patterns (2nd Preview)](https://openjdk.org/jeps/423)**: Esta mejora aumenta la productividad al extender el 'pattern matching' para una consulta de datos más sofisticada y componible.

**[JEP 433 – Pattern Matching for switch (4th Preview)](https://openjdk.org/jeps/433)**: Esta mejora la productividad al introducir el 'pattern matching' el la expresión 'switch'.

## Proyecto Panama
**[JEP 434 - Foreign Function & Memory API (2nd Preview)](https://openjdk.org/jeps/434)**: Con esta API, los programas en JAVA pueden interactuar con datos y código fuera del 'JAVA runtime' de manera más sencilla, con mayor rendimiento y seguridad.

**[JEP 438 - Vector API (5th Incubator)](https://openjdk.org/jeps/438)**: Esta mejora aumenta el rendimiento en las capacidades de cómputo escalar.

## Proyecto Loom
Este proyecto nos ha presentado 6 propuestas importantes de mejora desde el año 2017. Su enfoque principal es reducir el esfuerzo necesario para escribir, mantener y supervisar aplicaciones simultáneas de alto rendimiento.

**[JEP 436 - Virtual Threads (2nd Preview)](https://openjdk.org/jeps/436)**: Este desarrollo continúa con la implementación de los 'virtual threads' para aplicaciones con alta concurrencia.

**[JEP 429 – Scoped Values (Incubator)](https://openjdk.java.net/jeps/429)**: Esta mejora permite  compartir datos inmutables entre diferentes 'threads'.

**[JEP 437 - Structured Concurrency (2nd Incubator)](https://openjdk.java.net/jeps/437)**: La concurrencia estructurada simplifica la programación 'multithread' mediante la la introducción de una API para la concurrencia estructurada.


----------
fuente: [inside.java (The Arrival of Java 20!) 21/03/2023](https://inside.java/2023/03/21/the-arrival-of-java-20/)