Java SE 23 i OpenJDK 23 llançats

Després de sis mesos de desenvolupament, Oracle va publicar la plataforma Java SE 23 (Java Platform, Standard Edition 23), que utilitza el projecte OpenJDK de codi obert com a implementació de referència. Amb l'excepció de l'eliminació d'algunes característiques obsoletes, Java SE 23 manté la compatibilitat amb versions anteriors de la plataforma Java: la majoria dels projectes Java escrits anteriorment funcionaran sense canvis quan s'executen amb la nova versió. Les compilacions llestes per instal·lar de Java SE 22 (JDK, JRE i Server JRE) estan preparades per a Linux (x86_64, AArch64), Windows (x86_64) i macOS (x86_64, AArch64). Desenvolupada pel projecte OpenJDK, la implementació de referència de Java 23 és de codi obert totalment sota la llicència GPLv2, amb excepcions GNU ClassPath que permeten l'enllaç dinàmic amb productes comercials.

Java SE 23 es classifica com una versió de suport habitual i continuarà rebent actualitzacions fins a la propera versió. La branca de suport a llarg termini (LTS) hauria de ser Java SE 21 o Java SE 17, que rebran actualitzacions fins al 2031 i el 2029, respectivament (disponible generalment fins al 2028 i 2026). El suport estès per a la branca LTS de Java SE 8 durarà fins al 2030 i Java SE 11 fins al 2032.

Entre les 23 innovacions proposades a Java SE:

  • El mode de funcionament generatiu del col·lector d'escombraries ZGC (Generation Z Garbage Collector) està habilitat per defecte, utilitzant un processament separat d'objectes "vells" i "joves", que augmenta l'eficiència de netejar objectes creats recentment amb una vida útil curta. L'ús de Generational ZGC redueix el risc d'aturades durant l'assignació de recursos, redueix la càrrega de la CPU i el consum de memòria durant la recollida d'escombraries. Les proves de ZGC generacionals amb Apache Cassandra 4 van mostrar un augment de 4 vegades en el rendiment amb una mida de pila fixa i una reducció d'una quarta part de la mida de la pila amb un rendiment constant.
  • JavaDoc ha afegit suport per utilitzar Markdown per documentar el codi als comentaris, que es pot utilitzar en lloc d'una barreja d'etiquetes HTML i JavaDoc @.
    Java SE 23 i OpenJDK 23 llançats
  • Els mecanismes de concordança de patrons s'han millorat amb suport preliminar per a l'ús de tipus primitius (int, byte, char i altres tipus bàsics no objecte) en tot tipus de plantilles, a la instrucció "instanceof" i als blocs "switch". commuta (x.getStatus()) { cas 0 -> "d'acord"; cas 1 -> "avís"; cas 2 -> "error"; case int i -> "estat desconegut: " + i; } si (i instància del byte b) { … b … }
  • S'ha afegit suport preliminar per a l'ús d'una sola declaració "import mòdul M" per importar tots els paquets exportats per un mòdul especificat alhora. El canvi simplifica significativament la reutilització de biblioteques modulars, la qual cosa us permet incloure biblioteques i classes sense determinar el seu lloc a la jerarquia de paquets. Per exemple, especificant “import mòdul java.base” importarà els 54 paquets inclosos al mòdul java.base, que abans haurien de ser esmentats per separat (“import java.io.*”, “import java.util.* ” etc.).

    Es proposa una segona implementació preliminar de l'API Class-File per analitzar, generar i convertir fitxers de classe Java. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce: classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue(). startsWith("depuració"))) { classBuilder.with(ce);

  • La vuitena vista prèvia de l'API Vector proporciona funcions per a càlculs vectorials que s'executen mitjançant instruccions vectorials en els processadors x86_64 i AArch64 i permeten que les operacions s'apliquin simultàniament a diversos valors (SIMD). A diferència de les capacitats que ofereix el compilador HotSpot JIT per a la vectorització automàtica d'operacions escalars, la nova API permet controlar explícitament la vectorització per al processament de dades paral·lel.
  • S'han afegit mètodes format, printf, readPassword i readLine a la classe java.io.Console per formatar, mostrar i llegir text en funció de la configuració regional seleccionada. System.console().printf(Locale.FRANCE, "%1$tY-%1$tB-%1$te %1$tA", data nova()) 2024-mai-16 dimarts
  • S'ha afegit una segona implementació de vista prèvia de l'API de Stream estesa que admet la definició de les vostres pròpies operacions intermèdies, que pot ser útil en els casos en què les operacions intermèdies integrades existents no són suficients per a la transformació de dades desitjada. Els controladors natius es connecten mitjançant la nova operació intermèdia Stream::gather(Gatherer), que processa els elements del flux aplicant-hi un controlador especificat per l'usuari. jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(new WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • S'ha afegit una tercera implementació preliminar de classes declarades implícitament i instàncies sense nom del mètode "principal", que pot prescindir de declaracions públiques/estàtiques, passant una matriu d'arguments i altres entitats associades amb una declaració de classe. // era la classe pública HelloWorld { public static void main(String[] args) { System.out.println("Hola món!"); } } // ara podeu void main() { System.out.println("Hola, món!"); }
  • S'ha afegit una segona vista prèvia d'una característica que permet als constructors especificar expressions abans de cridar a super(...), que s'utilitza per cridar explícitament el constructor d'una classe pare des del constructor d'una classe heretada si aquestes expressions no fan referència a una instància creada pel constructor. class Outer { void hola () { System.out.println ("Hola"); } class Inner { Inner () { hola (); super(); } } }
  • S'ha afegit una tercera implementació de vista prèvia dels valors d'abast, que permet compartir dades immutables entre fils i intercanviar dades de manera eficient entre fils secundaris (els valors s'hereten). Els valors d'abast s'estan desenvolupant per substituir el mecanisme de variables locals de fils i són més eficients quan s'utilitzen un nombre molt gran de fils virtuals (milers o milions de fils). La principal diferència entre els valors d'abast i les variables locals del fil és que les primeres s'escriuen una vegada, no es poden canviar en el futur i només romanen disponibles durant l'execució del fil.
  • S'ha proposat una tercera vista prèvia de l'API de concurrència estructurada per a la prova, simplificant el desenvolupament d'aplicacions multifils mitjançant el processament de múltiples tasques que s'executen en diferents fils com un únic bloc.
  • Els mètodes d'accés a la memòria externa (fora de la JVM) proporcionats per la classe sun.misc.Unsafe han quedat obsolets i s'han programat per eliminar-los. Per accedir a la memòria fora del munt i interactuar amb codi extern, es recomana utilitzar l'API VarHandle i l'API FFM (Funció i memòria estrangera).

A més, podem destacar la publicació d'una actualització de la plataforma per a la creació d'aplicacions amb la interfície gràfica JavaFX 23 i la inclusió del compilador GraalVM JIT a l'Oracle JDK 23 principal.

També es presenta una nova versió de la màquina virtual universal GraalVM, que admet l'execució d'aplicacions en JavaScript (Node.js), Python, Ruby, R, qualsevol llenguatge per a la JVM (Java, Scala, Clojure, Kotlin) i llenguatges ​​per al qual es pot generar codi de bits LLVM (C , C++, Rust). A més de donar suport a JDK 23, la nova versió optimitza el consum de memòria i la mida del codi executable, i ofereix suport complet per a eines per incrustar Python i WebAssembly al codi Java mitjançant la compilació JIT.

Font: opennet.ru

Afegeix comentari