Lanzamiento de Java SE 18

Después de seis meses de desarrollo, Oracle lanzó Java SE 18 (Java Platform, Standard Edition 18), que utiliza el proyecto de código abierto OpenJDK como implementación de referencia. Con la excepción de la eliminación de algunas características obsoletas, Java SE 18 mantiene la compatibilidad con versiones anteriores de la plataforma Java; la mayoría de los proyectos Java escritos anteriormente funcionarán sin cambios cuando se ejecuten con la nueva versión. Las compilaciones listas para instalar de Java SE 18 (JDK, JRE y Server JRE) están preparadas para Linux (x86_64, AArch64), Windows (x86_64) y macOS (x86_64, AArch64). Desarrollada por el proyecto OpenJDK, la implementación de referencia de Java 18 es completamente de código abierto bajo la licencia GPLv2, con excepciones GNU ClassPath que permiten enlaces dinámicos con productos comerciales.

Java SE 18 está clasificada como una versión de soporte general y seguirá recibiendo actualizaciones hasta la próxima versión. La rama de soporte a largo plazo (LTS) debería ser Java SE 17, que seguirá recibiendo actualizaciones hasta 2029. Le recordamos que a partir del lanzamiento de Java 10, el proyecto pasó a un nuevo proceso de desarrollo, lo que implica un ciclo más corto para la formación de nuevas versiones. Ahora se desarrolla nueva funcionalidad en una rama maestra constantemente actualizada, que incluye cambios ya hechos y desde la cual las ramas se ramifican cada seis meses para estabilizar las nuevas versiones.

Las nuevas características de Java 18 incluyen:

  • La codificación predeterminada es UTF-8. Las API de Java que procesan datos de texto basados ​​en codificación de caracteres ahora usarán UTF-8 de forma predeterminada en todas las plataformas, independientemente de la configuración del sistema y la configuración regional. Para volver al comportamiento anterior, donde la codificación se elige según la configuración regional del sistema, puede usar la opción "-Dfile.encoding=COMPAT".
  • El paquete incluye el paquete com.sun.net.httpserver, que incluye la utilidad jwebserver y la biblioteca API con la implementación de un servidor http simple para servir contenido estático (no se admiten controladores CGI ni similares a servlets). El servidor HTTP integrado no está optimizado para cargas de trabajo y no admite control de acceso ni autenticación, ya que está destinado principalmente a su uso en el proceso de desarrollo para proyectos de creación de prototipos, depuración y prueba.
  • JavaDoc brinda soporte para la etiqueta "@snippet" para incrustar ejemplos de trabajo y fragmentos de código en la documentación de API, donde puede usar herramientas de validación, resaltado de sintaxis e integración IDE.
  • Se ha rediseñado la implementación de la API java.lang.reflect (Core Reflection), diseñada para obtener información sobre métodos, campos y constructores de clases, así como acceso a la estructura interna de clases. La API java.lang.reflect en sí permanece sin cambios, pero ahora se implementa utilizando identificadores de métodos proporcionados por el módulo java.lang.invoke, en lugar de usar generadores de código de bytes. El cambio nos permitió unificar las implementaciones de java.lang.reflect y java.lang.invoke y simplificar su mantenimiento.
  • Se ha propuesto una tercera vista previa de Vector API, que proporciona funciones para cálculos vectoriales que se ejecutan mediante instrucciones vectoriales en procesadores x86_64 y AArch64 y permiten aplicar operaciones simultáneamente a múltiples valores (SIMD). A diferencia de las capacidades proporcionadas en el compilador HotSpot JIT para la vectorización automática de operaciones escalares, la nueva API permite controlar explícitamente la vectorización para el procesamiento de datos paralelo.
  • Se agregó una interfaz SPI (interfaz de proveedor de servicios) para resolver nombres de host y direcciones IP, lo que le permite usar solucionadores alternativos en java.net.InetAddress que no están vinculados a los controladores ofrecidos por el sistema operativo.
  • Se proporciona una segunda vista previa de la API de función y memoria externa, que permite a las aplicaciones interactuar con código y datos fuera del tiempo de ejecución de Java. La nueva API le permite llamar de manera eficiente a funciones que no son JVM y acceder a memoria no administrada por JVM. Por ejemplo, puede llamar funciones desde bibliotecas compartidas externas y acceder a datos de procesos sin utilizar JNI.
  • Se ha agregado una segunda implementación experimental de coincidencia de patrones en expresiones “switch”, permitiendo el uso de patrones flexibles en etiquetas “case” en lugar de valores exactos, cubriendo una serie de valores a la vez, para lo que antes era necesario usar engorrosas cadenas de expresiones "si... si no". Objeto o = 123L; Cadena formateada = cambiar (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); caso Doble d -> String.format("doble %f", d); caso Cadena s -> String.format("Cadena %s", s); predeterminado -> o.toString(); };
  • El mecanismo de finalización y sus métodos asociados, como Object.finalize(), Enum.finalize(), Runtime.runFinalization() y System.runFinalization(), han quedado obsoletos y se deshabilitarán en una versión futura.
  • Los recolectores de basura ZGC (Z Garbage Collector), SerialGC y ParallelGC admiten la deduplicación de filas.

Fuente: opennet.ru

Añadir un comentario