Versión de Java SE 20

Despois de seis meses de desenvolvemento, Oracle lanzou a plataforma Java SE 20 (Java Platform, Standard Edition 20), 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 20 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 20 (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 20 é 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 20 clasifícase como versión de soporte regular, con actualizacións que se publicarán antes da próxima versión. A rama de Soporte a longo prazo (LTS) debería ser Java SE 17, que recibirá actualizacións ata 2029. Recordemos 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 estase desenvolvendo novas funcionalidades nunha rama mestra en constante actualización, que inclúe cambios xa completados e da que se ramifican cada seis meses para estabilizar as novas versións.

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

  • Hai soporte preliminar para os valores de alcance, que permite compartir datos inmutables entre fíos e intercambiar datos de forma eficiente entre fíos fillos (os valores herdanse). Os valores de alcance están a ser desenvolvidos para substituír o mecanismo de variables locais de fíos e son máis eficientes cando se usan un gran número de fíos virtuais (miles ou millóns de fíos). A principal diferenza entre os valores de alcance e as variables locais do fío é que as primeiras se escriben unha vez, non se poden cambiar no futuro e permanecen dispoñibles só durante a execución do fío. class Server { final static ScopedValue CURRENT_USER = new ScopedValue (); void serve(Solicitude de solicitude, resposta de resposta) { var level = (solicitude. isAuthorized()? ADMIN: GUEST); var usuario = novo usuario (nivel); ScopedValue.where(CURRENT_USER, user).run(() -> Application.handle(solicitude, resposta)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) throw new InvalidUserException (); devolver unha nova conexión DB(...); } }
  • Engadiuse unha segunda vista previa dos patróns de rexistro, ampliando a función de coincidencia de patróns introducida en Java 16 para analizar os valores das clases de rexistro. Por exemplo: gravar Point(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = px(); int y = py(); System.out.println(x+y); } }
  • Engadiuse unha cuarta implementación preliminar da coincidencia de patróns nas instrucións "switch", que permite que as etiquetas "case" usen valores non exactos, senón patróns flexibles que cobren unha serie de valores á vez, para o que antes era necesario empregar engorrosos. cadeas de expresións “se... senón”. static String formatterPatternSwitch(Object obj) { return switch (obj) { 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(); }; }
  • Engadiuse unha segunda implementación preliminar da API FFM (Foreign Function & Memory), que permite organizar a interacción dos programas Java con código e datos externos mediante a chamada de funcións desde bibliotecas externas e o acceso á memoria fóra da JVM.
  • Engadiuse unha segunda vista previa de fíos virtuais, que son fíos lixeiros que simplifican moito a escritura e o mantemento de aplicacións multi-fíos de alto rendemento.
  • Engadiuse unha segunda API experimental para o paralelismo estruturado, que simplifica o desenvolvemento de aplicacións multiproceso tratando varias tarefas executadas en diferentes fíos como un só bloque.
  • Engadiuse unha quinta vista previa da API Vector, que ofrece funcións para cálculos vectoriais que se realizan 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.

Fonte: opennet.ru

Engadir un comentario