Lanzamiento de Java SE 15

Después de seis meses de desarrollo, Oracle lanzado una plataforma JavaSE 15 (Java Platform, Standard Edition 15), el proyecto OpenJDK de código abierto se utiliza como implementación de referencia. Java SE 15 mantiene la compatibilidad con versiones anteriores de la plataforma Java; todos los proyectos Java escritos anteriormente funcionarán sin cambios cuando se lancen con la nueva versión. Compilaciones Java SE 15 listas para instalar (JDK, JRE y Server JRE) preparado para Linux (x86_64), Windows y macOS. Implementación de referencia desarrollada por el proyecto OpenJDK. Java 15 es completamente de código abierto bajo la licencia GPLv2, con excepciones GNU ClassPath que permiten enlaces dinámicos con productos comerciales.

Java SE 15 está clasificado 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 11, que seguirá recibiendo actualizaciones hasta 2026. La rama LTS anterior de Java 8 será compatible hasta diciembre de 2020. El próximo lanzamiento de LTS está previsto para septiembre de 2021. 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.

de innovaciones Java 15 uno puede marca:

  • Incorporado soporte para el algoritmo de creación de firma digital EdDSA (Edwards-Curve Digital Signature Algorithm) RFC 8032). La implementación EdDSA propuesta no depende de plataformas de hardware, está protegida contra ataques de canal lateral (se garantiza un tiempo constante de todos los cálculos) y tiene un rendimiento más rápido que la implementación ECDSA existente escrita en lenguaje C, con el mismo nivel de protección. Por ejemplo, EdDSA que utiliza una curva elíptica con una clave de 126 bits muestra un rendimiento similar a ECDSA con una curva elíptica secp256r1 y una clave de 128 bits.
  • Añadido por soporte experimental para clases e interfaces selladas, que no pueden ser utilizadas por otras clases e interfaces para heredar, ampliar o anular la implementación. Las clases selladas también proporcionan una forma más declarativa de restringir el uso de una superclase que los modificadores de acceso, basándose en una lista explícita de las subclases permitidas para la extensión.

    paquete com.ejemplo.geometría;

    clase pública sellada Forma
    permite com.example.polar.Circle,
    com.ejemplo.quad.Rectangle,
    com.ejemplo.quad.simple.Cuadrado {…}

  • Añadido por soporte para clases ocultas que no pueden ser utilizadas directamente por el código de bytes de otras clases. El propósito clave de las clases ocultas es usarse en marcos que generan clases dinámicamente en tiempo de ejecución y las usan indirectamente, a través de reflexión. Estas clases suelen tener un ciclo de vida limitado, por lo que mantenerlas para el acceso desde clases generadas estáticamente no está justificado y sólo conducirá a un mayor consumo de memoria. Las clases ocultas también eliminan la necesidad de la API no estándar sun.misc.Unsafe::defineAnonymousClass, cuya eliminación está prevista en el futuro.
  • El recolector de basura ZGC (Z Garbage Collector) se ha estabilizado y se reconoce que está listo para su uso generalizado. ZGC funciona en modo pasivo, minimiza al máximo la latencia debida a la recolección de basura (el tiempo de parada cuando se usa ZGC no supera los 10 ms) y puede trabajar con montones tanto pequeños como grandes, cuyo tamaño varía desde varios cientos de megabytes hasta muchos terabytes.
  • Estabilizado y encontrado listo para uso general.
    recolector de basura Shenandoah, trabajando con pausas mínimas (Low-Pause-Time Garbage Collector). Shenandoah fue desarrollado por Red Hat y se destaca por el uso de un algoritmo que reduce el tiempo de parada durante la recolección de basura ejecutando la limpieza en paralelo con la ejecución de aplicaciones Java. El tamaño de los retrasos introducidos por el recolector de basura es predecible y no depende del tamaño del montón, es decir para montones de 200 MB y 200 GB los retrasos serán idénticos (no salgas más de 50 ms y normalmente dentro de 10 ms);

  • El soporte se ha estabilizado e introducido en el idioma. bloques de texto - una nueva forma de cadenas literales que le permite incluir datos de texto de varias líneas en el código fuente sin utilizar caracteres de escape y conservando el formato de texto original en el bloque. El bloque está enmarcado por tres comillas dobles.

    Por ejemplo, en lugar del código

    Cadena html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"¡Java 1 ya está aquí!\" » +
    "\n\t" + " » +
    "\n" + " ";

    puedes especificar:

    Cadena html = """


    »Java 1\
    ¡es aquí!

    """;

  • Reelaborado API DatagramSocket heredada. Las implementaciones antiguas de java.net.DatagramSocket y java.net.MulticastSocket han sido reemplazadas por una implementación moderna que es más fácil de depurar y mantener, y también es compatible con los flujos virtuales desarrollados dentro del proyecto. cuerda natural. En caso de posible incompatibilidad con el código existente, la implementación anterior no se ha eliminado y se puede habilitar usando la opción jdk.net.usePlainDatagramSocketImpl.
  • Segunda implementación experimental propuesta. la coincidencia de patrones en el operador "instanceof", que le permite definir inmediatamente una variable local para acceder al valor marcado. Por ejemplo, puede escribir inmediatamente "if (obj instancia de String s && s.length() > 5) {.. s.contains(..) ..}" sin definir explícitamente "String s = (String) obj".

    Fue

    si (obj instancia del grupo) {
    Grupo grupo = (Grupo)obj;
    var entradas = group.getEntries();
    }

    Ahora puedes prescindir de la definición “Grupo grupo = (Grupo) obj”:

    if (obj instancia del grupo grupo) {
    var entradas = group.getEntries();
    }

  • Propuesto Segunda implementación experimental de la palabra clave ".grabar", que proporciona una forma compacta para definir clases, lo que le permite evitar definir explícitamente varios métodos de bajo nivel como equals(), hashCode() y toString() en los casos en que los datos se almacenan solo en campos cuyo comportamiento no cambia. Cuando una clase utiliza implementaciones estándar de los métodos equals(), hashCode() y toString(), puede prescindir de su definición explícita:

    registro público BankTransaction (fecha LocalDate,
    doble cantidad
    Descripción de cadena) {}

    Esta declaración agregará automáticamente implementaciones de los métodos equals(), hashCode() y toString() además de los métodos constructor y getter.

  • Propuesto una segunda vista previa de la API de acceso a memoria externa, que permite a las aplicaciones Java acceder de forma segura y eficiente a regiones de memoria fuera del montón de Java mediante la manipulación de las nuevas abstracciones MemorySegment, MemoryAddress y MemoryLayout.
  • Desactivado y desaprobó la técnica de optimización de bloqueo sesgado utilizada en HotSpot JVM para reducir la sobrecarga de bloqueo. Esta técnica ha perdido su relevancia en sistemas con instrucciones atómicas proporcionadas por CPU modernas y su mantenimiento requiere demasiada mano de obra debido a su complejidad.
  • Anunciado mecanismo obsoleto Activación RMI, que se eliminará en una versión futura. Cabe señalar que la activación RMI está desactualizada, relegada a la categoría de opción en Java 8 y casi nunca se utiliza en la práctica moderna.
  • Remoto motor javascript Nashorn, que quedó obsoleto en Java SE 11.
  • Eliminado puertos para procesadores Solaris OS y SPARC (Solaris/SPARC, Solaris/x64 y Linux/SPARC). La eliminación de estos puertos permitirá a la comunidad acelerar el desarrollo de nuevas funciones de OpenJDK sin perder tiempo manteniendo funciones específicas de Solaris y SPARC.

Fuente: opennet.ru

Añadir un comentario