Na zes maanden ontwikkeling heeft Oracle het Java SE 27-platform (Java Platform, Standard Edition 27) gepubliceerd, waarvan de referentie-implementatie wordt uitgevoerd door het open-sourceproject OpenJDK. Behalve het verwijderen van enkele verouderde mogelijkheden, behoudt Java SE 27 de achterwaartse compatibiliteit met eerdere versies van het Java-platform — de meeste eerder geschreven Java-projecten zullen zonder wijzigingen functioneren op de nieuwe versie. Klaar-voor-installatie pakketten van Java SE 27 (JDK, JRE en Server JRE) zijn voorbereid voor Linux (x86_64, AArch64), Windows (x86_64) en macOS (x86_64, AArch64). De referentie-implementatie van Java SE 27, ontwikkeld binnen het OpenJDK-project, is volledig open onder de GPLv2-licentie met uitzonderingen van GNU ClassPath die dynamische binding met commerciële producten toestaan.
Java SE 27 valt onder de categorie releases met een standaard ondersteuningsperiode, waarvan updates zullen worden uitgebracht tot de volgende release. Voor een lange termijn ondersteuningsbranch (LTS) kunnen Java SE 25, Java SE 21 of Java SE 17 worden gebruikt, waarvan updates zullen worden uitgebracht tot respectievelijk 2033, 2031 en 2029 (voor openbare releases — tot september 2030, 2028 en 2026). De uitgebreide ondersteuning voor de LTS-branch van Java SE 8 duurt tot 2030, en voor Java SE 11 tot 2032.
Onder de wijzigingen in Java SE 27 (1, 2, 3, 4):
- Standaard is de G1 (Garbage-First) garbage collector ingeschakeld voor alle omgevingen, die eerder werd toegepast op serversystemen. G1 is geoptimaliseerd voor gebruik op multiprocessorsystemen met veel geheugencapaciteit en balans tussen voorspelbaarheid van latencies en hoge doorvoer. Tijdens de werking verdeelt G1 het geheugen in meerdere kleine regio's en maakt in de eerste plaats de gebieden schoon waar meer ongebruikte objecten zijn en minder actief gebruikte gegevens.
- In de HotSpot JVM zijn compacte objectheaders standaard ingeschakeld. De grootte van de headers op 64-bits systemen is verminderd van 96 naar 64 bits, wat het geheugengebruik heeft verminderd en de kans vergroot dat gegevens in de processor-cache komen. In SPECjbb2015-tests is het geheugengebruik met 22% gedaald, de CPU-lading is met 8% verminderd en het aantal garbage collection-operaties is met 15% afgenomen. Bij het testen van de JSON-parser is de testdoorlooptijd met 10% verminderd.
- TLS 1.3 heeft ondersteuning voor hybride key agreement schema's toegevoegd, die het ML-KEM (CRYSTALS-Kyber) algoritme combineren, dat bestand is tegen aanvallen op kwantumcomputers, met klassieke algoritmen op basis van elliptische krommen ECDHE: X25519MLKEM768 (ECDHE met de kromme X25519 + ML-KEM-768), SecP256r1MLKEM76 (ECDHE met de kromme secp256r1 + ML-KEM-768) en SecP384r1MLKEM1024 (ECDHE met de kromme secp384r1 + ML-KEM-1024). In de API javax.net.ssl Deze schema's zijn standaard ingeschakeld en vereisen geen wijzigingen in applicaties om gebruikt te worden.
- In de JDK Flight Recorder (JFR), die wordt gebruikt voor monitoring, profilering en prestatie-diagnose, is ondersteuning toegevoegd voor het schoonmaken van opgeslagen diagnostische informatie zoals commandoregelargumenten, initiële waarden van omgevingsvariabelen en systeeminstellingen. Deze wijziging helpt om het uitlekken van vertrouwelijke gegevens te voorkomen die door het geprofileerde proces worden verwerkt, zoals autorisatietokens en API-toegangssleutels die via omgevingsvariabelen worden doorgegeven.
- De derde voorlopige versie van de API Lazy Constants is geïmplementeerd voor het werken met objecten die onveranderlijke gegevens bevatten en in de JVM als constanten worden behandeld. Deze objecten ondergaan prestatie-optimalisaties die vergelijkbaar zijn met die van velden met het sleutelwoord "final". In tegenstelling tot "final" splitst de nieuwe API de creatie van constante waarden van hun initiatie, garandeert dat een waarde slechts eenmaal kan worden geïnitieerd, vermindert de opstarttijd van programma's en maakt het mogelijk om constant folding optimalisaties toe te passen in gebruikerscode, die voorheen alleen in de interne JDK-code werden gebruikt. class Application { // Voorheen: // static final UserService USERS = new UserService(); // Nu is het mogelijk: static final StableValue<UserService> USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
- In het patroonmatching mechanisme is een vijfde voorlopige variant voorgesteld die het gebruik van primitieve types (int, byte, char en andere basistypen die geen objecten zijn) in alle typen sjablonen, in de "instanceof" operator en in "switch" blokken mogelijk maakt. switch (x.getStatus()) { case 0 -> "okay"; case 1 -> "warning"; case 2 -> "error"; case int i -> "unknown status: " + i; } if (i instanceof byte b) { … b … }
- De zevende voorlopige versie van de API voor gestructureerde gelijktijdigheid (Structured Concurrency), die de ontwikkeling van multithreaded applicaties vereenvoudigt door meerdere taken die in verschillende threads worden uitgevoerd als één enkel blok te behandelen, wordt aangeboden voor testen.
- De twaalfde testimplementatie van de Vector API is gerealiseerd, die functies biedt voor vectorberekeningen die worden uitgevoerd met behulp van vectorinstructies van x86_64 en AArch64 processors en die gelijktijdig operaties op meerdere waarden (SIMD) mogelijk maken. In tegenstelling tot de mogelijkheden van automatische vectorisatie van scalairen met de JIT-compiler HotSpot, biedt de nieuwe API de mogelijkheid om expliciet de vectorisatie voor parallelle gegevensverwerking te beheren.
- De derde voorlopige versie van de API voor het coderen en decoderen van objecten met cryptografische sleutels, certificaten en lijsten van ingetrokken certificaten, met gebruik van het PEM-formaat (Privacy-Enhanced Mail), is nu beschikbaar.
Bovendien kan de publicatie van een update voor het creëren van applicaties met de grafische interface JavaFX 27 worden opgemerkt. Binnen enkele uren wordt ook de release van de universele virtuele machine GraalVM 27 verwacht, die de uitvoering van applicaties in JavaScript (Node.js), Python, Ruby, R, elke taal voor JVM (Java, Scala, Clojure, Kotlin) en talen waarvoor LLVM-bitscode kan worden gegenereerd (C, C++, Rust) ondersteunt.
Bron: opennet.ru
