Versión de Java SE 17

Despois de seis meses de desenvolvemento, Oracle lanzou a plataforma Java SE 17 (Java Platform, Standard Edition 17), que utiliza o proxecto de código aberto OpenJDK como implementación de referencia. Coa excepción da eliminación dalgunhas funcións obsoletas, Java SE 17 mantén a compatibilidade con versións anteriores da plataforma Java; a maioría dos proxectos Java escritos anteriormente aínda funcionarán sen modificación cando se executen coa nova versión. As compilacións instalables de Java SE 17 (JDK, JRE e Server JRE) están preparadas para Linux (x86_64, AArch64), Windows (x86_64) e macOS (x86_64, AArch64). Desenvolvida polo proxecto OpenJDK, a implementación de referencia de Java 17 é totalmente de código aberto baixo a licenza GPLv2 con excepcións GNU ClassPath para permitir ligazóns dinámicas a produtos comerciais.

Java SE 17 está clasificado como unha versión de soporte a longo prazo (LTS), que seguirá recibindo actualizacións ata 2029. Descontinuáronse as actualizacións da versión anterior de Java 16. A rama LTS anterior de Java 11 será compatible ata 2026. O próximo lanzamento de LTS está programado para setembro de 2024. Lembrámosvos que a partir do lanzamento de Java 10, o proxecto pasou a un novo proceso de desenvolvemento, o que implica un ciclo máis curto para a formación de novos lanzamentos. Agora desenvólvese unha nova funcionalidade nunha rama mestra que se actualiza constantemente, que inclúe cambios xa feitos e desde a que se ramifican cada seis meses para estabilizar as novas versións.

As novas funcións de Java 17 inclúen:

  • Proponse unha implementación experimental de coincidencia de patróns en expresións "switch", que permite empregar valores non exactos en etiquetas de "caso", senón modelos flexibles que cobren unha serie de valores á vez, para os que antes era necesario empregar engorrosos. cadeas de expresións "se... senón". Ademais, "switch" ten a capacidade de manexar valores NULL. Obxecto 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("Cadea %s", s); predeterminado -> o.toString(); };
  • Soporte estabilizado para clases e interfaces seladas, que non poden ser utilizadas por outras clases e interfaces para herdar, ampliar ou anular a implementación. As clases seladas tamén proporcionan un xeito máis declarativo de restrinxir o uso dunha superclase que os modificadores de acceso, baseándose na lista explícita das subclases permitidas para a extensión. paquete com.example.xeometry; clase pública selada Permisos de forma com.example.polar.Circle, com.example.quad.Rectángulo, com.example.quad.simple.Square {…}
  • Proponse unha segunda vista previa da API Vector, que proporciona funcións para cálculos vectoriais que se executan mediante instrucións vectoriais nos procesadores x86_64 e AArch64 e permiten aplicar operacións simultáneamente a varios valores (SIMD). A diferenza das capacidades proporcionadas no compilador HotSpot JIT para a vectorización automática de operacións escalares, a nova API permite controlar explícitamente a vectorización para o procesamento de datos paralelo.
  • Engadiuse unha vista previa da API de memoria e funcións estranxeiras, que permite que as aplicacións interactúen con código e datos fóra do tempo de execución de Java. A nova API permítelle chamar de forma eficiente funcións que non son JVM e acceder a memoria non xestionada por JVM. Por exemplo, pode chamar funcións desde bibliotecas compartidas externas e acceder a datos do proceso sen usar JNI.
  • O motor de renderizado de macOS que alimenta a API Java 2D, que á súa vez potencia a API Swing, adaptouse para utilizar a API de gráficos Metal. A plataforma macOS segue a usar OpenGL de forma predeterminada, e para habilitar a compatibilidade con Metal é necesario configurar "-Dsun.java2d.metal=true" e, polo menos, executar macOS 10.14.x.
  • Engadiuse un porto para a plataforma macOS/AArch64 (ordenadores Apple baseados nos novos chips Apple M1). Unha característica especial do porto é o soporte para o mecanismo de protección de memoria W^X (Write XOR Execute), no que non se pode acceder simultáneamente ás páxinas de memoria para a escritura e a execución. (o código pódese executar só despois de desactivar a escritura, e escribir nunha páxina de memoria só é posible despois de desactivar a execución).
  • Volveuse a usar só a semántica strictfp para expresións de punto flotante. O soporte para a semántica "predeterminada", dispoñible desde o lanzamento de Java 1.2, foi descontinuado, incluíndo simplificacións para traballar en sistemas con coprocesadores matemáticos x87 moi antigos (tras a aparición das instrucións SSE2, a necesidade de semántica adicional desapareceu).
  • Implementáronse novos tipos de interfaces para xeradores de números pseudoaleatorios e implementáronse algoritmos adicionais para unha mellor xeración de números aleatorios. As aplicacións teñen a oportunidade de escoller un algoritmo para xerar números pseudoaleatorios. Compatibilidade mellorada para xerar fluxos de obxectos aleatorios.
  • Forzouse a encapsulación estrita de todos os elementos internos de JDK, coa excepción das API críticas como sun.misc.Unsafe. A encapsulación estrita bloquea os intentos do código para acceder a clases, métodos e campos internos. Anteriormente, o modo de encapsulación estrito podía desactivarse mediante a opción "--illegal-access=permit", pero agora quedou en desuso. As aplicacións que requiren acceso a clases, métodos e campos internos deberían definilos explícitamente mediante a opción --add-opens ou o atributo Add-Opens no ficheiro de manifesto.
  • As aplicacións teñen a capacidade de definir filtros de deserialización de datos, que poden ser sensibles ao contexto e seleccionados dinámicamente en función de operacións de deserialización específicas. Os filtros especificados son aplicables a toda a máquina virtual (en toda a JVM), é dicir. cobre non só a aplicación en si, senón tamén as bibliotecas de terceiros utilizadas na aplicación.
  • Swing engadiu o método javax.swing.filechooser.FileSystemView.getSystemIcon para cargar iconas grandes para mellorar a IU nas pantallas de alto DPI.
  • A API de java.net.DatagramSocket ofrece soporte para conectarse a grupos de multidifusión sen necesidade dunha API de java.net.MulticastSocket separada.
  • Mellorouse a utilidade IGV (Ideal Graph Visualizer), proporcionando unha visualización interactiva da representación de código intermedio no compilador HotSpot VM C2 JIT.
  • En JavaDoc, por analoxía co compilador javac, cando se produce un erro, agora indícanse o número da liña problemática no ficheiro fonte e a localización do erro.
  • Engadida a propiedade native.encoding, que reflicte o nome da codificación de caracteres do sistema (UTF-8, koi8-r, cp1251, etc.).
  • Engadiuse a interface java.time.InstantSource, que permite a manipulación do tempo sen facer referencia a un fuso horario.
  • Engadida a API java.util.HexFormat para converter a representación hexadecimal e viceversa.
  • Engadiuse ao compilador un modo de buraco negro, que desactiva as operacións de eliminación de códigos mortos, que se poden usar cando se realizan probas de rendemento.
  • Engadiuse a opción "-Xlog:async" a Runtime para gravar rexistros en modo asíncrono.
  • Ao establecer conexións seguras, TLS 1.3 está habilitado por defecto (anteriormente utilizábase TLS 1.2).
  • A API de Applet (java.applet.Applet*, javax.swing.JApplet) declarada obsoleta anteriormente, que se utilizou para executar aplicacións Java no navegador, moveuse á categoría de eliminación programada (perdeu a relevancia despois do final do soporte). para o complemento Java para navegadores).
  • Security Manager, que hai tempo perdeu a súa relevancia e resultou ser non reclamado despois do fin do soporte para o complemento do navegador, pasou á categoría dos programados para a súa eliminación.
  • Eliminouse o mecanismo de activación RMI, que está desactualizado, relegado á categoría de opción en Java 8 e case nunca se usa na práctica moderna.
  • Un compilador experimental que admite JIT (just-in-time) para a compilación dinámica de código Java para HotSpot JVM, así como o modo de compilación anticipada (AOT, ahead-of-time) de clases en código de máquina antes de iniciar a máquina virtual , eliminouse do SDK. O compilador foi escrito en Java e baseouse no traballo do proxecto Graal. Nótase que o mantemento do compilador require moita man de obra, o que non se xustifica cando non hai demanda dos desenvolvedores.

Fonte: opennet.ru

Engadir un comentario