Java 19

Blogpost

Welkom Java 19!

Het is stilaan een vaste waarde geworden. Net als de eerste schooldag, de herfst, de kortere dagen, … en sinds enkele jaren steevast ook een nieuwe Java release! Java 19 zag vorige maand het levenslicht. De release datum is reeds lang op voorhand gekend. De vraag is dus welke features de eindmeet wel/niet gehaald hebben.

In vroegere tijden waren de Java releases weinig voorspelbaar. Het duurde vaak jaren om een nieuwe major versie vrij te geven. Sinds Java 9 (september 2017) heeft Oracle echter het roer omgegooid en gekozen voor een zesmaandelijkse major release en elke 3 jaar een nieuwe Long Term Supported release. De releasedatum mag dan wel voorspelbaar zijn, het is toch altijd even wachten welke features de “final cut” zullen halen… 

Wat zit er dan in Java 19? 

Het valt op dat alle nieuwe feature, op één na, de status Preview hebben gekregen. Je zal ze dus expliciet moeten activeren om er gebruik van te maken. Preview features zijn volledig gespecificeerd evenals geïmplementeerd. Features krijgen de status Preview met als doel om feedback te verzamelen van de community.

Java 19 is de eerste met Virtual Threads (Preview), een lang aangekondigde en nog meer verwachtte feature. Virtual Threads (officieel JEP 425, beter gekend als Project Loom) heeft in Java 19 de Preview status gekregen. 

Met Virtual Threads worden Java runtime(virtual) threads losgekoppeld van de onderliggende Operating System threads.

Volgens de proposal zou dit de performantie substantieel verbeteren ten opzichte van klassieke Operating System threads, doch eenzelfde programmeerparadigma aanhouden. Enkel bij het aanmaken van Virtual Threads kan je ze onderscheiden van de klassieke threads. Nadien zijn ze nauwelijks te onderscheiden.  Dit om de overgang van threads naar Virtual Threads te vereenvoudigen.

Voor het gebruik van Records zijn er enkele syntactische aanpassingen ingevoerd. Zowel voor de if expressies als de switch statements is er voor records een verkorte instanceof-syntax. Daarbij hebben Record types voortaan geen lokale variabele meer nodig. Door de volledige  (record) type definitie te hernemen, kan je de velden rechtstreeks gebruiken.

				
					Object record = new Candidate("John", "Dough");
// standaard syntax
if (record instanceof Candidate c) {
   System.out.println("Candidate is " + c.givenName() + " " + c.name());
}
// syntax in Java 19 preview
if (record instanceof Candidate(String givenName, String name)) {
   System.out.println("Candidate is " + givenName + " " + name);
}
				
			

De nieuwe syntax is enkel toegankelijk wanneer de JDK in Preview modus runt. 

Naast de Preview features zijn er ook 2 Incubating (beta) features en één enkele officiële feature release: de RISC-V architectuur port. Die port is al enige tijd beschikbaar en zo goed als afgerond. Met deze JEP 422 wordt die port geïntegreerd in de main-line repository. 

En dat, geeft wat mij betreft ook aan wat het belang is van de Java Runtime Environment. Met de regelmaat van de klok wordt de relevantie van Java in vraag gesteld: Is Java niet stilaan voorbijgestreefd etc. De focus ligt daar héél sterk (exclusief?) op Java als programmeertaal en gaat compleet voorbij aan de Java Runtime. En laat nu net die laatste enkel relevanter geworden met de de nieuwere generatie programmeertalen. Groovy, Closure, Celon, Kotlin en Scala, om er handvol te benoemen. Allemaal talen die Java Runtime als fundament gebruiken. Ondanks die gemeenschappelijke basis zijn het stuk voor stuk talen met een eigen karakter, doelgroep en paradigma’s.

De impact van de JRE wordt nog duidelijker als je de verschillende distributies in rekening brengt. Voorheen moest je bij Oracle (ex Sun) of IBM zijn om Java binaries te downloaden voor je platform. Sinds Oracle enkele jaren geleden de broncode heeft vrijgegeven, is het aantal distributies van Java exponentieel toegenomen. Voor Java binaries heb je voortaan keuze uit vele distributies: AdoptOpenJDK, Amazon, SAP, Microsoft, RedHat, Azul, BelSoft Liberica, …  

Laat er geen twijfel over bestaan: Java is nog steeds relevant.

Referenties

Picture of benoit

Benoît Liessens

Java Software Crafter

Benoît is een ervaren Java Software Crafter. Na het afstuderen heeft Benoît zijn carrière gekickstart als Java Consultant. In november 2021, heeft Benoît Continuum vervoegd als Senior Software Crafter.