6min

Vanaf vandaag is JDK 20 beschikbaar voor gebruik. 6 JEP’s krijgen de nodige updates in JDK 20. Wij konden voor de lancering alvast een kijkje nemen via een briefing met Oracle en zetten ze kort onder elkaar in dit artikel.

Organisaties en ontwikkelaars die Java als programmeertaal gebruiken, weten sinds een jaar of vijf (sinds de lancering van JDK 10) waar ze aan toe zijn als het gaat om nieuwe releases. Ieder jaar is er in maart en in september een update. Aangezien we nu in maart zitten, is het dus tijd voor de nieuwste Java-telg, JDK 20. Zoals gebruikelijk zijn er weer de nodige updates doorgevoerd. Oracle heeft het zelf over duizenden updates op het gebied van stabiliteit en prestaties. Uiteindelijk zijn het vooral de updates aan enkele JEP’s (JDK Enhancement Proposals) die het meest in het oog springen.

Java blijft populair

Voor we ingaan op enkele projecten (JEP’s) binnen de Java-community, is het goed om eerst even kort te schetsen hoe het ervoor staat met deze programmeertaal. Java is in ieder geval nog altijd een van de populairste programmeertalen. Het is uiteraard een beetje afhankelijk van hoe je het meet en bekijkt – en vooral ook wie er over rapporteert – maar Java behoort in ieder geval tot de populairste talen. Oracle zelf stelt (uiteraard) dat het de nummer 1 is, maar zorgt er wel voor dat het er een lastig te kwantificeren kwalificatie achter zet. Zo is het de nummer 1 taal voor de actuele technologietrends en de nummer 1 in ‘overall development organizational use‘. Helemaal duidelijk is niet wat ze daarmee bedoelen.

Wel duidelijk zijn de aantallen JVM’s (Java Virtual Machines) die Oracle claimt voor Java. 60 miljard actieve JVM’s en 38 miljard cloudgebaseerde JVM’s. Met andere woorden, het merendeel van de JVM’s draait in de cloud.

Iedere zes maanden, LTS dichter op elkaar

We haalden het al aan, Java krijgt sinds een jaar of vijf iedere zes maanden een nieuwe release. Dit biedt de nodige voordelen. Allereerst maakt deze cyclus het eenvoudiger om een nieuwe release in gebruik te nemen. Het aantal (grote) wijzigingen is beduidend lager dan wanneer er een veel langere tijd tussen releases zit.

Daarnaast is het mogelijk om meer dingen uit te proberen. Preview features zijn hier een goed voorbeeld van. Dat zijn features die in principe klaar voor productie zijn, maar waarvan men wil weten of ze doen wat ze moeten doen voor ontwikkelaars. Die kunnen ermee aan de slag in combinatie met verschillende use-cases en er feedback op geven. Dit soort features staan uiteraard standaard niet ingeschakeld. Een ander voordeel van de kortere updatecyclus is dat het nu mogelijk is om features in delen op te leveren. Er kan dan onderweg ook nog van koers gewijzigd worden, mocht dat beter aansluiten op de actualiteit en de wensen van de developers.

Hieronder zie je hoe een dergelijke stapsgewijze benadering eruit ziet voor Project Amber, een van de JEP’s binnen Java.

Initieel was het de bedoeling om iedere drie jaar een release van Java uit te brengen met Long-Term Support, oftewel LTS. Op dit moment zijn er drie versies met LTS op de markt: 8, 11 en 17. De eerstvolgende versie met LTS is versie 21. Die komt later dit jaar in september uit. De periode tussen versies met LTS is overigens wel korter geworden. Waar dat in eerste instantie drie jaar was, is dat vanaf JDK 17 twee jaar.

JEP’s in de spotlight bij JDK 20

Hierboven zag je in het het plaatje over de uitrol van features al iets over Project Amber staan. Dat is een van de JEP’s waar nieuwe features voor beschikbaar zijn of naar een andere fase zijn gebracht. Naast Amber legt Oracle vooral nog de nodige nadruk op Project Loom en Project Panama. Tijdens de briefing vallen verder ook nog de namen van Project Leyden, Project Valhalla en Project ZGC. Dit zijn allemaal projecten waar meerdere partijen (binnen OpenJDK) aan werken.

In het algemeen gaat het bij Project Amber om Java eenvoudiger in gebruik te maken en hiermee toegankelijker. Project Leyden richt zich op het verbeteren van de prestaties, met name als het gaat om de tijd die het duurt van opstarten/opwarmen tot piekprestaties. Met Project Loom wil men Java beter schaalbaar maken, door de mapping tussen Java threads en platformthreads fundamenteel te veranderen. Dit is mogelijk middels virtuele threads. Hiermee is het mogelijk om tienduizenden Java threads met een enkele platformthread te koppelen. Dat moet voor een stevige boost in schaalbaarheid zorgen. Volgens de woordvoerder van Oracle die de briefing gaf is dit een een zeer populaire feature binnen de community.

Van de overige drie, Project Panama, Project Valhalla en Project ZGC, springt vooral de tweede in dit rijtje eruit wat ons betreft. Valhalla is een behoorlijk ambitieus project, want tamelijk fundamenteel. Hiermee wil men de manier waarop Java omgaat met geheugen en hoe data in geheugen gezien wordt opnieuw neerzetten. Project Panama draait onder andere om hoe Java met andere programmeertalen overweg kan. Project ZGC richt zich tot slot op garbage collection met zeer lage latency specifiek voor apps die heel veel geheugen gebruiken.

De specifieke updates aan de JEP’s gaan we hier verder niet allemaal behandelen. Hieronder hebben we (in het Engels) de volgens Oracle belangrijkste updates van Java 20 onder elkaar gezet. Van de JEP’s licht het zelf vooral Project Loom en Project Panama uit.

Language Updates and Improvements

  • JEP 432: Record Patterns (Second Preview): Enhances the Java language by allowingusers to nest record patterns and type patterns to create a powerful, declarative, and composable form of data navigation and processing. This helps increase developer productivity by enabling them to extend pattern matching to allow for more sophisticated and composable data queries.
  • JEP 433: Pattern Matching for Switch (Fourth Preview): By extending pattern matching to switch, an expression can be tested against a number of patterns – each with a specific action – so that complex data-oriented queries can be expressed concisely and safely. Expanding the expressiveness and applicability of switch expressions and statements helps increase developer productivity.

Project Loom Preview/Incubator Features

  • JEP 429: Scoped Values (Incubator): Enables the sharing of immutable data within and across threads, which are preferred to thread-local variables – especially when using large numbers of virtual threads. This increases ease-of-use, comprehensibility, robustness, and performance.
  • JEP 436: Virtual Threads (Second Preview): Significantly streamline the process of writing, maintaining, and observing high-throughput, concurrent applications by introducing lightweight virtual threads to the Java Platform. By enabling developers to easily troubleshoot, debug, and profile concurrent applications with existing JDK tools and techniques, virtual threads helps accelerate application development.
  • JEP 437: Structured Concurrency (Second Incubator): Simplifies multithreaded programming by treating multiple tasks running in different threads as a single unit of work. This helps development teams streamline error handling and cancellation, improve reliability, and enhance observability.  

Project Panama Preview Features

  • JEP 434: Foreign Function & Memory API (Second Preview): Enables Java programs to interoperate with code and data outside of the Java runtime. By efficiently invoking foreign functions (i.e., code outside the Java Virtual Machine [JVM]), and by safely accessing foreign memory (i.e., memory not managed by the JVM), this feature enables Java programs to call native libraries and process native data without requiring the Java Native Interface. This increases ease-of-use, performance, and safety.
  • JEP 438: Vector API (Fifth Incubator): Expresses vector computations that reliably compile at runtime to vector instructions on supported CPU architectures. This increases performance compared to equivalent scalar computations.

Nieuwe licentiestructuur

Tot slot ging het tijdens de briefing ook nog over de nieuwe licentiestructuur. Daar schreven we eerder dit jaar al een nieuwsbericht over. Dit is dus geen nieuws dat specifiek bij JDK 20 hoort, maar toch wel belangrijk voor organisaties die het gebruik van Java SE afnemen bij Oracle. Oracle heeft bedacht dat een vaste prijs per medewerker beter werkt dan het voorgaande systeem. In dat rekenmodel moest je zaken zoals processors en NUPS (oftewel Named Users) tellen. Dat was volgens Oracle voor veel organisaties een vervelend klusje. Vandaar de overstap naar een eenvoudiger rekenmodel.

Wat het nieuwe rekenmodel betekent voor organisaties op het gebied van kosten, valt te bezien. De kans is aanwezig dat de kosten omhoog gaan. Of die hogere kosten opwegen tegen de beloofde verbetering in gebruiksgemak, zal moeten blijken. Het is voor nu trouwens wel mogelijk om volgens de oude methode te blijven werken. Dat liet een woordvoerder van Oracle weten tijdens de briefing. Organisaties die dit goed ingeregeld hebben, hoeven dus (nog) niet over te stappen naar het nieuwe model.