Na zes maanden ontwikkeling heeft Oracle het Java SE 26-platform (Java Platform, Standard Edition 26) gepubliceerd, waarbij het open-source project OpenJDK als referentie-implementatie wordt gebruikt. Behalve enkele verouderde functies te hebben verwijderd, blijft Java SE 26 compatibel met eerdere versies van het Java-platform ā de meeste eerder geschreven Java-projecten zullen zonder aanpassingen werken met de nieuwe versie. Klaar om te installeren versies van Java SE 26 (JDK, JRE en Server JRE) zijn beschikbaar voor Linux (x86_64, AArch64), Windows (x86_64) en macOS (x86_64, AArch64). De referentie-implementatie van Java SE 26, ontwikkeld onder het OpenJDK-project, is volledig open source onder de GPLv2-licentie met uitzonderingen van GNU ClassPath, die dynamische koppeling met commerciĆ«le producten toestaan.
Java SE 26 valt onder de categorie releases met een standaard ondersteuningsperiode, waarvan updates worden uitgebracht tot aan de volgende release. Voor een lange ondersteuningsperiode (LTS) moeten Java SE 25, Java SE 21 of Java SE 17 worden gebruikt, waarvoor updates tot respectievelijk 2033, 2031 en 2029 worden uitgebracht (openbaar tot september 2030, 2028 en 2026). De uitgebreide ondersteuning van de LTS-tak Java SE 8 loopt tot 2030, terwijl javascript SE 11 tot 2032 wordt ondersteund.
Onder de wijzigingen in Java SE 26 (1, 2, 3, 4):
- Een waarschuwing wordt weergegeven bij het gebruik van diepe reflectie om velden te wijzigen die zijn gemarkeerd met het sleutelwoord 'final'. In de toekomst is het de bedoeling om onveilige taalmogelijkheden standaard uit te schakelen en, onder andere, velden die als final zijn gemarkeerd volledig onveranderlijk te maken, door het mogelijk maken van wijzingen via diepe reflectie (API Reflectie) te verwijderen.
- De Applet API (java.applet.Applet*, javax.swing.JApplet) is verwijderd, die werd gebruikt voor het starten van Java-applicaties in de browser. Deze API is achterhaald sinds de ondersteuning van de Java-plugin voor browsers is gestopt en werd in 2021 als verouderd verklaard.
- De mogelijkheid tot gebruik van vooraf samengestelde cache (AOT ā ahead-of-time) is gerealiseerd met alle garbage collectors, inclusief ZGC (Z Garbage Collector). De wijziging houdt ondersteuning in voor het sequentieel laden van gecacheerde Java-objecten in het geheugen, met gebruik van een universeel en ongebonden van de garbage collectors format in plaats van directe mapping naar geheugen-specifieke cachepresentaties. Het gebruik van AOT-cache verkort de opstarttijd en versnelt de warming-up van de HotSpot virtuele machine.
- In de API HTTP Client is ondersteuning voor het HTTP/3-protocol toegevoegd, waardoor applicaties en bibliotheken servers via HTTP/3 kunnen benaderen na minimale wijzigingen in de code.
- De prestaties van de G1-garbage collector zijn verbeterd door het verminderen van blokkades voor synchronisatie van applicatiestromen met de threads van de garbage collector.
- Een tweede voorlopige versie van de API voor het coderen en decoderen van objecten met cryptografische sleutels, certificaten en lijsten van ingetrokken certificaten is voorgesteld, gebruikmakend van het PEM-formaat (Pivacy-Enhanced Mail).
- Een zesde voorlopige versie van de API voor gestructureerde paralleliteit (Structured Concurrency) is voorgesteld voor testdoeleinden. Dit vereenvoudigt de ontwikkeling van multi-threaded toepassingen door verschillende taken die in verschillende threads worden uitgevoerd, als ƩƩn enkel blok te behandelen.
- Een tweede voorlopige versie van de API Lazy Constants is toegevoegd voor het werken met objecten die onveranderlijke gegevens bevatten en die in de JVM als constanten worden behandeld. Op dergelijke objecten worden prestatieoptimalisaties toegepast die vergelijkbaar zijn met velden met het sleutelwoord 'final'. In tegenstelling tot 'final' scheidt de nieuwe API de creatie van constante waarden van hun initiatie, garandeert dat de waarde slechts één keer kan worden geïnitialiseerd, verkort de opstarttijd van programma's en stelt optimalisaties voor constant folding in gebruikerscode mogelijk, die eerder alleen in interne JDK-code werden gebruikt. class Application { // Was: // static final UserService USERS = new UserService(); // Nu kan: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
- In het mechanisme voor patroonmatching is een vierde voorlopige mogelijkheid voorgesteld voor het gebruik van primitieve types (int, byte, char en andere basis types die geen objecten zijn) in alle soorten sjablonen, 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 ⦠}
- Een elfde testimplementatie van de Vector API is voorgesteld, die functies biedt voor vectorberekeningen, uitgevoerd met behulp van vectorinstructies van x86_64 en AArch64 processors, waarmee gelijktijdig bewerkingen op meerdere waarden kunnen worden toegepast (SIMD). In tegenstelling tot de autovectorisatie mogelijkheden van de HotSpot JIT-compiler voor scalare bewerkingen, biedt de nieuwe API de mogelijkheid om expliciet de vectorisatie voor parallelle gegevensverwerking te beheren.
Daarnaast heeft Oracle project Detroit aangekondigd, dat zich binnen OpenJDK zal ontwikkelen en gericht is op het verbeteren van de draagbaarheid tussen Java, JavaScript en Python. In het kader van het project is het de bedoeling om inbedding in het JVM-runtime proces met de JavaScript-motor V8 en de CPython-interpreter mogelijk te maken. Eerder had Oracle al de JavaScript-motor Nashorn ontwikkeld, die op de JVM draait, maar het project stopgezet vanwege de moeilijkheid om een aparte implementatie van JavaScript te ontwikkelen, gezien het feit dat het belangrijkste ecosysteem afhankelijk is van de V8-motor.
Verder kan de publicatie van de update voor het ontwikkelen van applicaties met de grafische interface JavaFX 26 worden opgemerkt. Binnenkort wordt ook de release van de GraalVM 26 voorzien, een universele virtuele machine die de uitvoering van applicaties in JavaScript (Node.js), Python, Ruby, R, en elke taal voor JVM (Java, Scala, Clojure, Kotlin) ondersteunt, evenals talen waarvoor LLVM-bitecode kan worden gegenereerd (C, C++, Rust).
Bron: opennet.ru
