Na zes maanden ontwikkeling heeft Oracle Java SE 27 (Java Platform, Standard Edition 27) uitgebracht, dat gebruikmaakt van het open-sourceproject OpenJDK als referentie-implementatie. Met uitzondering van het verwijderen van enkele verouderde functies, behoudt Java SE 27 achterwaartse compatibiliteit met eerdere releases van het Java-platform – de meeste eerder geschreven Java-projecten zullen ongewijzigd werken onder de nieuwe versie. Kant-en-klare installatiepakketten van Java SE 27 (JDK, JRE en Server JRE) zijn beschikbaar. Linux (x86_64, AArch64), Windows (x86_64) en macOS (x86_64, AArch64). De Java SE 27-referentie-implementatie is ontwikkeld door het OpenJDK-project en is volledig open source onder de GPLv2-licentie met de GNU ClassPath Exception, waardoor dynamische koppeling met commerciële producten mogelijk is.
Java SE 27 wordt beschouwd als een reguliere ondersteuningsrelease, waarbij updates worden uitgebracht tot de volgende release. De long-term support (LTS)-tak is Java SE 25, Java SE 21 of Java SE 17, met updates die respectievelijk tot 2033, 2031 en 2029 worden uitgebracht (over het algemeen beschikbaar tot september 2030, 2028 en 2026). De uitgebreide ondersteuning voor de Java SE 8 LTS-tak loopt door tot 2030 en voor Java SE 11 tot 2032.
De wijzigingen in Java SE 27 (1, 2, 3, 4) omvatten:
- Standaard gebruiken alle omgevingen de G1 (Garbage-First) garbage collector, die voorheen werd gebruikt voor serversystemen. G1 is geoptimaliseerd voor gebruik op multiprocessorsystemen met een grote geheugencapaciteit en voor het vinden van een balans tussen voorspelbare latentie en hoge doorvoer. Tijdens de werking verdeelt G1 het geheugen in veel kleine regio's en geeft prioriteit aan de regio's met meer ongebruikte objecten en minder actief benaderde gegevens.
- De HotSpot JVM gebruikt standaard compacte objectheaders. Op 64-bits systemen is de headergrootte verkleind van 96 naar 64 bits, waardoor het geheugenverbruik afneemt en de kans groter wordt dat gegevens in de processorcache terechtkomen. In SPECjbb2015-benchmarks daalde het geheugenverbruik met 22%, de CPU-belasting met 8% en het aantal garbage collection-bewerkingen met 15%. De testduur van de JSON-parser werd met 10% verkort.
- De TLS 1.3-implementatie biedt ondersteuning voor hybride sleutelovereenkomstschema's die het kwantumresistente ML-KEM (CRYSTALS-Kyber)-algoritme combineren met klassieke ECDHE-elliptische-curve-algoritmen: X25519MLKEM768 (ECDHE met de X25519-curve + ML-KEM-768), SecP256r1MLKEM76 (ECDHE met de secp256r1-curve + ML-KEM-768) en SecP384r1MLKEM1024 (ECDHE met de secp384r1-curve + ML-KEM-1024). Deze functionaliteit is beschikbaar in de javax.net API.ssl Deze schema's zijn standaard ingeschakeld en vereisen geen wijzigingen in de applicatie om te gebruiken.
- JDK Flight Recorder (JFR), een tool voor prestatiebewaking, profilering en diagnostiek, ondersteunt nu het anonimiseren van commandoregelargumenten, beginwaarden van omgevingsvariabelen en systeemeigenschappen in opgeslagen diagnostische informatie. Deze wijziging voorkomt het lekken van gevoelige gegevens die door het geprofileerde proces worden verwerkt, zoals autorisatietokens en API-toegangssleutels die via omgevingsvariabelen worden doorgegeven.
- De derde preview van de Lazy Constants API is geïmplementeerd voor het werken met objecten die onveranderlijke data bevatten en die in de JVM als constanten worden behandeld. Prestatieoptimalisaties vergelijkbaar met die voor velden met het sleutelwoord "final" worden op dergelijke objecten toegepast. In tegenstelling tot "final" scheidt de nieuwe API het aanmaken van constante waarden van hun initialisatie, garandeert dat een waarde slechts één keer kan worden geïnitialiseerd, verkort de opstarttijd van het programma en maakt het mogelijk om constant-folding-optimalisaties, die voorheen alleen in JDK-interne code werden gebruikt, in gebruikerscode toe te passen. class Application { // Voorheen: // static final UserService USERS = new UserService(); // Nu: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
- De patroonherkenningsengine introduceert een vijfde versie van de mogelijkheid om primitieve gegevenstypen (int, byte, char en andere niet-objectgebaseerde typen) te gebruiken in allerlei patronen, in de `instanceof`-operator en in `switch`-blokken. `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 versie van de Structured Concurrency API, die de ontwikkeling van multithreaded applicaties vereenvoudigt door meerdere taken die op verschillende threads draaien als één geheel te behandelen, is vrijgegeven voor testen.
- De twaalfde testimplementatie van de Vector API is voltooid. Deze API biedt functies voor vectorberekeningen die worden uitgevoerd met behulp van vectorinstructies voor x86_64- en AArch64-processors en maakt gelijktijdige bewerkingen op meerdere waarden (SIMD) mogelijk. In tegenstelling tot de automatische vectorisatie van scalaire bewerkingen door de HotSpot JIT-compiler, biedt de nieuwe API expliciete controle over vectorisatie voor parallelle gegevensverwerking.
- Een derde versie van de API is nu beschikbaar voor het coderen en decoderen van objecten die cryptografische sleutels, certificaten en certificaatintrekkingslijsten bevatten, met behulp van het PEM-formaat (Pivacy-Enhanced Mail).
Daarnaast kondigen we met genoegen de release aan van een update voor het JavaFX 27-platform voor het ontwikkelen van grafische gebruikersinterface-applicaties. De release van de universele virtuele machine GraalVM 27, die het uitvoeren van applicaties in JavaScript (Node.js), Python, Ruby, R, elke JVM-taal (Java, Scala, Clojure, Kotlin) en talen waarvoor LLVM-bitcode kan worden gegenereerd (C, C++, Rust) ondersteunt, wordt ook binnen enkele uren verwacht.
Bron: opennet.ru
