Lanzamiento de Java SE 17

Después de seis meses de desarrollo, Oracle lanzó la plataforma Java SE 17 (Java Platform, Standard Edition 17), cuya implementación de referencia utiliza el proyecto abierto OpenJDK. A excepción de la eliminación de algunas funcionalidades obsoletas, Java SE 17 mantiene la compatibilidad hacia atrás con versiones anteriores de la plataforma Java: la mayoría de los proyectos Java previamente escritos funcionarán sin cambios en la nueva versión. Se han preparado compilaciones de Java SE 17 (JDK, JRE y Server JRE) listas para instalar en Linux (x86_64, AArch64), Windows (x86_64) y macOS (x86_64, AArch64). La implementación de referencia de Java 17, desarrollada en el marco del proyecto OpenJDK, es completamente abierta bajo la licencia GPLv2 con excepciones de GNU ClassPath, que permiten el enlace dinámico con productos comerciales.

Java SE 17 se clasifica como una versión de soporte a largo plazo (LTS), con actualizaciones que se lanzarán hasta el año 2029. La producción de actualizaciones para la versión intermedia anterior, Java 16, ha sido detenida. La antigua rama LTS de Java 11 se mantendrá hasta 2026. La próxima versión LTS está programada para septiembre de 2024. Cabe recordar que, a partir de la versión Java 10, el proyecto ha cambiado a un nuevo proceso de desarrollo que implica ciclos de lanzamiento más cortos. La nueva funcionalidad ahora se desarrolla en una rama maestra actualizada continuamente, donde se incorporan cambios listos y de la cual se bifurcan ramas para estabilizar nuevos lanzamientos cada seis meses.

Entre las novedades de Java 17 se pueden destacar:

  • Se ha propuesto una implementación experimental de coincidencia por patrón en las expresiones "switch", lo que permite utilizar en las etiquetas "case" no solo valores exactos, sino también patrones flexibles que abarcan una serie de valores, para los cuales antes era necesario usar complejas cadenas de expresiones "if…else". Además, dentro de "switch" se ha asegurado la posibilidad de manejar valores NULL. Object o = 123L; String formatted = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); };
  • Se ha estabilizado el soporte para clases e interfaces selladas que no pueden ser utilizadas por otras clases e interfaces para herencia, extensión o modificación de implementación. Las clases selladas también ofrecen un método más declarativo para restringir el uso de la superclase en comparación con los modificadores de acceso, al basarse en la enumeración explícita de las subclases permitidas para la extensión. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}
  • Se ha propuesto una segunda implementación preliminar de la API Vector, que proporciona funciones para cálculos vectoriales que se realizan utilizando instrucciones vectoriales en procesadores x86_64 y AArch64 y permiten aplicar operaciones a múltiples valores simultáneamente (SIMD). A diferencia de las capacidades de autovectorización de operaciones escalares ofrecidas por el compilador JIT HotSpot, la nueva API permite gestionar explícitamente la vectorización para el procesamiento paralelo de datos.
  • Se ha añadido una implementación preliminar de la API de Funciones Externas y Memoria, que permite a las aplicaciones interactuar con código y datos que están fuera del entorno de ejecución de Java. La nueva API permite llamar eficientemente a funciones que no se ejecutan en la JVM y acceder a memoria que no es gestionada por la JVM. Por ejemplo, se pueden llamar funciones de bibliotecas compartidas externas y acceder a datos del proceso sin utilizar JNI.
  • El motor de renderizado para macOS, que proporciona el API Java 2D, que a su vez se utiliza en el API Swing, se ha adaptado para utilizar el API gráfico Metal. Por defecto, en la plataforma macOS aún se utiliza OpenGL, y para habilitar el soporte de Metal se requiere establecer el parámetro «-Dsun.java2d.metal=true» y tener al menos la versión 10.14.x de macOS.
  • Se ha añadido un puerto para la plataforma macOS/AArch64 (computadoras Apple basadas en los nuevos chips Apple M1). Una característica del puerto es el soporte del mecanismo de protección de memoria W^X (Write XOR Execute), donde las páginas de memoria no pueden ser accesibles para escritura y ejecución al mismo tiempo. (el código solo puede ejecutarse después de deshabilitar la escritura, y la escritura en una página de memoria solo es posible después de deshabilitar la ejecución).
  • Se ha devuelto el uso solo de la semántica estricta (strictfp) para expresiones con punto flotante. Se ha dejado de dar soporte a la semántica «default», que incluía simplificaciones para sistemas con coprocesadores matemáticos muy antiguos x87, a partir del lanzamiento de Java 1.2 (después de la aparición de las instrucciones SSE2, la necesidad de semántica adicional desapareció).
  • Se han implementado nuevos tipos de interfaces para generadores de números pseudoaleatorios, así como algoritmos adicionales para una mejor generación de números aleatorios. Se ha dado a las aplicaciones la posibilidad de elegir el algoritmo de generación de números pseudoaleatorios. Se ha mejorado el soporte para la generación de flujos de objetos aleatorios.
  • Se ha implementado la encapsulación estricta obligatoria de todos los elementos internos del JDK, excepto para las API críticas, como sun.misc.Unsafe. La encapsulación estricta bloquea los intentos de acceso del código a clases, métodos y campos internos. Antes, se podía desactivar el modo de encapsulación estricta con la opción «—illegal-access=permit», pero ahora se ha declarado obsoleta. Para aplicaciones que necesitan acceso a clases, métodos y campos internos, deben definirse explícitamente mediante la opción «—add-opens» o el atributo Add-Opens en el archivo de manifiesto.
  • Se ha dado a las aplicaciones la posibilidad de definir filtros para la deserialización de datos, que pueden depender del contexto y seleccionarse dinámicamente en relación con operaciones específicas de deserialización. Los filtros establecidos son aplicables a toda la una máquina virtual (a nivel de JVM), es decir, abarcan no solo la aplicación en sí, sino también las bibliotecas de terceros utilizadas en la aplicación.
  • Se ha añadido el método javax.swing.filechooser.FileSystemView.getSystemIcon en Swing para cargar íconos de gran tamaño, lo que mejora la formación de la interfaz en pantallas con alta densidad de píxeles (HighDPI).
  • En la API java.net.DatagramSocket se ha implementado el soporte para conectarse a grupos Multicast sin necesidad de utilizar una API separada java.net.MulticastSocket.
  • Se ha mejorado la utilidad IGV (Ideal Graph Visualizer), que proporciona una visualización interactiva de la representación intermedia del código en el compilador JIT HotSpot VM C2.
  • En JavaDoc, similar al compilador javac, al reportar un error ahora se indica el número de la línea problemática en el archivo fuente y la ubicación del error.
  • Se ha añadido la propiedad native.encoding, que refleja el nombre de la codificación de caracteres del sistema (UTF-8, koi8-r, cp1251, etc.).
  • Se ha añadido la interfaz java.time.InstantSource, que permite manipular el tiempo sin vinculación a una zona horaria.
  • Se ha añadido la API java.util.HexFormat para convertir a una representación hexadecimal y viceversa.
  • Se ha añadido al compilador el modo blackhole, que desactiva las operaciones de eliminación de código no utilizado (dead-code elimination), lo que puede ser útil en pruebas de rendimiento.
  • Se ha añadido en Runtime la opción «-Xlog:async» para registrar logs en modo asíncrono.
  • Al establecer conexiones seguras, se utiliza por defecto TLS 1.3 (anteriormente se utilizaba TLS 1.2).
  • Se ha trasladado a la categoría de eliminación el API Applet (java.applet.Applet*, javax.swing.JApplet), que se usaba para ejecutar aplicaciones Java en navegadores (ha perdido relevancia tras la descontinuación del soporte para el complemento Java en navegadores).
  • Se ha trasladado a la categoría de eliminación el Security Manager, que ha quedado obsoleto y no se ha utilizado desde la descontinuación del soporte para el complemento del navegador.
  • Se ha eliminado el mecanismo RMI Activation, que se considera obsoleto, pasó a ser una opción desde Java 8 y casi no se utiliza en la práctica moderna.
  • Se ha eliminado del SDK el compilador experimental que soportaba JIT (just-in-time) para la compilación dinámica de código Java para HotSpot JVM, así como el modo de compilación anticipada (AOT, ahead-of-time) de clases a código máquina antes del inicio de la máquina virtual. El compilador fue escrito en Java y basado en los desarrollos del proyecto Graal. Se señala que el mantenimiento del compilador requiere un alto esfuerzo, que no se justifica dada su falta de demanda entre los desarrolladores.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster