Dit is wat je kunt verwachten van JDK 18
Het is alweer even geleden dat Oracle de release frequentie van Java Long-term Support releases flink opschroefde. Het is nog even wachten op de volgende LTS, maar de nieuwste update van de Java Development Kit (Kortweg: JDK) is is wel aanstaande. Aankomende dinsdag is deze beschikbaar voor het grote publiek. Deze worden binnen de Java community JDK Enhancement Proposals genoemd, kortweg JEP’s. Ik – Rino van Wijngaarden – ging door de lijst met JEPs heen. In 2 minuten weten waarom de JDK 18 van toegevoegde waarde is voor jouw ontwikkelaars? In dit artikel lichten we de mooiste functionaliteiten uit.
Overzicht JDK Enhancement Proposals
JEP-400: UTF-8 by Default
De standaard karakter encoding (‘default charset’) werd voorheen door de JDK tijdens opstarten bepaald. Deze hing dan af van OS, locale van de gebruiker en andere factoren. Deze default charset kan daardoor op Windows anders zijn dan op bijvoorbeeld Linux of Mac. De default is nu consistent. ‘UTF-8’. Voor ons in Europa zal de impact minimaal zijn. Een grotere impact wordt verwacht bij Windows i.c.m. Aziatische locales.
https://openjdk.java.net/jeps/400
JEP-408: Simple Web Server
JEP-408: Simple Web Server doet precies wat het zegt. Het biedt een command line tool (‘jwebserver’) welke een simpele HTTP web server start die statische files uit een folder aanbiedt. Handig voor prototyping en testing.
https://openjdk.java.net/jeps/408
JEP-413: Code Snippets in Java API Documentation
Deze JEP maakt het gemakkelijker om voorbeeldcode op te nemen in de JavaDoc (met @snippet). Dit kan inline of verwijzend naar een file (external snippet). Je kunt zelfs stukken code uitlichten of manipuleren.
https://openjdk.java.net/jeps/413
JEP-416: Reimplement Core Reflection with Method Handles
Er zijn 3 verschillende interne mechanismen om reflectie mogelijk te maken. Deze change zorgt ervoor dat er straks nog maar 1 is (minder onderhoud). java.lang.reflect.Method, Constructor, en Field worden geimplementeerd boven op de (in Java 7 geintroduceerde) java.lang.invoke method handles.
https://openjdk.java.net/jeps/416
JEP-417: Vector API (Third Incubator)
Met JEP-417 introduceert Oracle een nieuwe API om complexe vector algorithmen explicieter op te stellen. Deze worden runtime gecompileerd naar de onderliggende CPU architectuur, om zo beter gebruik te maken van de CPU. Voorheen gebeurde dit automatisch, onder water en zonder controle.
https://openjdk.java.net/jeps/417
JEP-418: Internet-Address Resolution SPI
De java.inet.InetAddress API vertaalt hostnames van- en naar IP adressen. Voorheen werd alleen de native resolver van het onderliggende OS gebruikt. In Java 18 wordt een Service Provider Interface gebruikt welke het mogelijk maakt om andere resolvers in te pluggen. Maakt de weg vrij voor Project Loom en moderne network technieken zoals bijv. DNS over QUIC, TLS, of HTTPS.
https://openjdk.java.net/jeps/418
JEP-419: Foreign Function & Memory API (Second Incubator)
Met deze JEP wordt een nieuwe API geïntroduceerd waarmee Java programma’s kunnen interacteren met code (en data) buiten de JVM. Het doel is om het aloude JNI te vervangen met een beter (meer Java minded) development model.
https://openjdk.java.net/jeps/419
JEP-420: Pattern Matching for switch (Second Preview)
In JDK17 als preview geintroduceerd, de 2e preview bevat verbeteringen op het gebied van:
- ‘dominance of pattern labels’:
- De compiler geeft een fout als een eerdere case label een latere case label ‘overschaduwt’ (net zoals je eigenlijk bij try/catch gewend was)
- ‘Exhaustiveness of switch expressions and statements’
- De compiler geeft een fout als niet alle cases / patterns zijn afgedekt (checked ook de sealed classes / permits)
https://openjdk.java.net/jeps/420
JEP-421: Deprecate Finalization for Removal
De Finalizer in Java (protected void finalize()) is een manier om resources op te ruimen – als afsluitende actie – om leaks te voorkomen.
Er zijn echter nogal wat problemen ontdekt (20 jaar geleden al) met deze resource management techniek op het gebied van veiligheid, performance, betrouwbaarheid en onderhoudbaarheid. De finalize wordt daarom gedeprecate en in een volgende release verwijderd. Je kunt het nu evt. al testen met de commandline option –finalization=disabled BTW: beste is om try-with-resources te gebruiken of de cleaner API!
https://openjdk.java.net/jeps/421
Ter Afsluiting
Vanuit InnSpire Software Engineering publiceren we met regelmaat artikelen over Java. Wil je meer weten over de mogelijkheden van Java, klankborden met Java Engineers of zoek je een nieuwe Java uitdaging? Neem dan contact op met mijn collega Alex Hoeksma.