Java 9 – hvad er nyt?

Ifølge Oracles officielle udmeldelser kan vi regne med at Java 9 bliver udgivet i løbet af 2017. Java 9 har været længe ventet, men er blevet udskudt et par gange pga. Jigsaw – Java 9’s nye modul-system, samt for mange udestående bugs i Java 9. JDK 9 er sat til release omkring juli 2017, og indtil videre ser det ud til at holde.

Men hvad er det så vi får i Java 9?

Hvis du gerne vil se den fulde liste af nye features, kan du se den her:

http://openjdk.java.net/projects/jdk9/

At gennemgå hele listen af nye features ville tage for lang tid. En stor del af de nye features er også “under-the-hood”-features som vi Java-udviklere ikke direkte mærker noget til. Jeg vil i stedet fokusere på nogle af de mest betydningsfulde ændringer: Nye features vi kan bruge i vores applikationer, samt ændringer vi ikke kan undgå at mærke til.

Jigsaw

Jigsaw er Java 9’s nye modul-system. Dette er helt klart den største nyhed / ændring i Java 9. Jigsaw har også været årsag til en del af forsinkelsen for Java 9.

Med Jigsaw kommer et nyt begreb kaldet et “modul”. Et modul er en form for JAR fil med nogle ekstra informationer inkluderet. Et modul kan fortælle hvilke packages som må være synlige for applikationer og andre moduler som bruger dette modul. Et modul kan også fortælle hvilke andre moduler det afhænger af, ligesom vi er vant til med Maven dependencies.

Som en del af Java 9’s modul-system bliver alle APIerne i Java delt op i moduler. Denne opdeling skulle gerne bevirke, at Java-applikationer kan starte op hurtigere. I stedet for at skulle loade hele Java runtime JAR-filen ind i RAM kan JVM’en nu blot loade de moduler der reelt bliver brugt af din applikation.

Jigsaw skulle også betyde, at man kan pakke en Java-applikation sammen i en selvstændig executable med mindre overhead. I stedet for at inkludere hele Java’s runtime JAR, kan man nu nøjes med at inkludere de Java-moduler som applikationen rent faktisk bruger.

Der er desværre intet versions-begreb i Jigsaw. Det er ikke muligt at definere, at et modul afhænger af en bestemt version af et andet modul. Versionsafhængigheder er holdt ude af Jigsaw for at simplificere implementationen. Der henvises til systemer som f.eks. OSGI, Maven og ModRun til at håndtere afhængigheder af bestemte versioner af moduler.

JMH – Java Microbenchmark Harness

Java Microbenchmark Harness (JMH) skulle blive Java’s officielle benchmarking-værktøj fra Java 9. JMH er designet til benchmarking af små metoder og komponenter som normalt kan være svære at benchmarke korrekt. Når små metoder og komponenter køres i tight loops som man tit gør når kan selv benchmarker sine komponenter, kan JVM’en finde på at anvende diverse kode-optimeringer som ikke er mulige når metoden / komponenten kaldes som en del af en rigtig applikation.

JMH hjælper dig med at strukturere benchmarks så du undgår de værste faldgruber som f.eks dead code elimination og constant folding. Hvis du gerne vil vide mere om JMH har jeg skrevet en længere tutorial om JMH her:

http://tutorials.jenkov.com/java-performance/jmh.html

Process API

Process APIet i Java 9 giver bedre kontrol med eksterne processer som startes op inde fra Java applikationer. Det nye API giver mulighed for at få adgang til en “parent” process fra en child process, og flere andre nyttige ting.

HTTP 2 Client

Java 9 indeholder et nyt HTTP API som har understøttelse for HTTP 2 og WebSockets. Dette API er dog ikke en del af standard JDK’et, men skal inkluderes separat hvis man vil bruge det.

JShell

JShell er en interaktiv shell som kan afvikle Java-kode som enkelte statements. En sådan interaktiv shell findes i mange andre sprog som f.eks. Python og Scala. Nu får Java den også.

Updates til JavaFX

Java’s fremtidige desktop GUI toolkit hedder JavaFX. Det er meningen at JavaFX skal erstatte Swing på sigt. JavaFX har efterhånden 8-9 år på bagen, er ret avanceret, og noget mere konsistent at arbejde med end Swing. JavaFX blev inkluderet i Java SDK’et fra Java 8. I Java 9 får JavaFX et par nye features.

Nu tænker du måske, at desktop GUI apps er døde – at alle laver web apps i dag. Sjovt nok er det lige modsat på mobilen, ikke? Der er det native apps som er “vejen frem”. Ligeledes kan der laves masser af gode desktop applikationer til alm. PC’er stadigvæk. I Java 9 skulle det endda blive lettere at pakke dem sammen som executables til de mest populære desktop-platforme som Windows, Mac osv.

EcmaScript 6 features i Nashorn

En sidste interessant feature er at Java’s indbyggede JavaScript engine Nashorn får support for nogle af de nye features i EcmaScript 6. Listen af nye, understøttede features er forholdsvis lang, så der vil jeg henvise til den originale JEP for mere information. Du kan finde beskrivelsen via linket i starten af denne artikel.

NOTE: Jigsaw er blevet nedstemt i nuværende form og der kan derfor være flere forhindringer inden den kommer med.

Jakob Jenkov

Seniorkonsulent | Instruktør

Softwarearkitekt / seniorudvikler med ekspertise indenfor Java, data streaming og distribuerede systemer generelt (inkl. web), både cloud, hybrid cloud og on-premise. Erfaring med teknologier som Kafka, Kafka Streams, Docker, Kubernetes, Azure, AWS etc. Vant til at arbejde efter agile processer som Scrum eller Kanban. Jakob Jenkov har udviklet og vedligeholdt adskillige Open Source Javaprojekter og har gennem årene publiceret mere end 850 tutorials, artikler og bøger om blandt Java, AngularJS, Maven, Gradle, Ant, Git, HTML5, CSS, JavaFX og JQuery.