Java 11-functies

We hebben ons nog niet volledig ondergedompeld in Java 10 en Java 11 is hier. Java 11 is om meer dan een paar redenen belangrijk. Oracle heeft zijn ondersteuningsmodel vernieuwd en is gekomen met een release-trein die snelle updates zal brengen, ongeveer elke 6 maanden. Ze hebben het licentiemodel en ondersteuningsmodel veranderd, wat betekent dat als je de Java 11 Oracle JDK downloadt, het betaald zal zijn voor commercieel gebruik.

Betekent dit dat ik vanaf nu moet betalen voor Java? NEE. Niet noodzakelijk, tenzij je de Oracle JDK downloadt en het in productie gebruikt.

Opmerking: IntelliJ IDEA 2018.2.4 Community Edition heeft al ondersteuning voor Java 11.

1. Waarom is Java 11 belangrijk?

Java 11 is de tweede LTS-release na Java 8. Sinds Java 11 zal Oracle JDK niet langer gratis zijn voor commercieel gebruik. Je kunt het gebruiken in ontwikkelingsfasen, maar om het commercieel te gebruiken, moet je een licentie kopen. Als je dat niet doet, kun je op elk moment een factuur krijgen van Oracle! Java 10 was de laatste gratis Oracle JDK die kon worden gedownload. Oracle stopt de ondersteuning voor Java 8 vanaf januari 2019. Je zult moeten betalen voor verdere ondersteuning. Je kunt het blijven gebruiken, maar krijgt geen patches/beveiligingsupdates meer.

Oracle zal geen gratis langetermijnondersteuning (LTS) bieden voor enige enkele Java-versie sinds Java 11.

Hoewel Oracle JDK niet langer gratis is, kun je altijd de Open JDK-builds downloaden van Oracle of andere aanbieders zoals AdoptOpenJDK, Azul, IBM, Red Hat, enzovoort. Naar mijn mening, tenzij je op zoek bent naar zakelijk gebruik op enterprise niveau met de bereidheid om te betalen voor de ondersteuningskosten, kun je OpenJDK gebruiken en ze upgraden wanneer nodig.

2. Welke JDK-build moet ik downloaden en wat zijn de voordelen van elk van hen?

Aangezien Oracle een release-trein heeft gecreëerd waarbij elke zes maanden een nieuwe versie uitkomt, als je de gratis Open JDK van Oracle gebruikt, moet je deze elke zes maanden bijwerken, aangezien Oracle geen gratis updates meer zal verstrekken zodra de nieuwe versie is uitgebracht. Dit kan uitdagend zijn voor een bedrijf. Betaal voor commerciële ondersteuning aan Oracle en migreer alleen van de ene LTS-versie naar de volgende LTS-versie. Op deze manier krijg je alle updates en ondersteuning voor Java 11 tot 2026. Je kunt Java 17 downloaden in 2022. Blijf op de gratis Java-versie, zelfs nadat de ondersteuning is beëindigd. Hoewel je geen beveiligingsupdates zult krijgen en dit beveiligingslekken kan openen.

Oracle zal geen commerciële ondersteuning of updates bieden voor Java 9 en Java 10. Je moet op zoek naar andere alternatieve builds om ze gratis te blijven gebruiken.

Na het begrijpen van de bagage die Java 11 met zich meebrengt, laten we nu de belangrijke functies in Java 11 voor ontwikkelaars analyseren. We zullen ook enkele belangrijke JEP’s bespreken. Let op: JavaFX zal beschikbaar zijn als een aparte module en niet gebonden zijn aan het 6-maandelijkse releasecycluschema van Java JDK.

3. Hoe Java 11 Gratis Versie te downloaden?

U kunt de productieklare OpenJDK-versie downloaden van deze link. De binaries zijn in tar- of zip-formaat, dus pak ze gewoon uit en stel de omgevingsvariabelen in om de Java-compiler en Java-opdrachten te gebruiken.

4. Java 11 Functies

Enkele van de belangrijke Java 11-functies zijn:

  • Uitvoeren van Java-bestand met één opdracht
  • Nieuwe hulpprogramma-methoden in de String-klasse
  • Lokale variabelen syntaxis voor lambda-parameters
  • Toegangscontrole op basis van geneste structuren
  • JEP 321: HTTP-client
  • Lezen/Schrijven van Strings naar en van de bestanden
  • JEP 328: Flight Recorder

Laten we de nieuwe functies bespreken die zijn geïntroduceerd met Java 11 vanuit het JEP-proces.

4.1) Uitvoeren van Java-bestand met één opdracht

Een belangrijke verandering is dat je het Java-bronbestand niet eerst hoeft te compileren met het javac-gereedschap. Je kunt het bestand direct uitvoeren met het java-commando en het wordt impliciet gecompileerd. Deze functie valt onder JEP 330. Hieronder volgt een voorproefje van de nieuwe methoden van de Java String-klasse die zijn geïntroduceerd in Java 11:

4.2) Methoden van Java String

isBlank() – Deze instantiemethode retourneert een boolean-waarde. Lege strings en strings met alleen witruimte worden als leeg beschouwd.

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        // Jouw code hier!
        
        System.out.println(" ".isBlank()); //true
        
        String s = "Anupam";
        System.out.println(s.isBlank()); //false
        String s1 = "";
        System.out.println(s1.isBlank()); //true
    }
}

lines() Deze methode retourneert een stream van strings, wat een verzameling is van alle substrings gesplitst per regel.

import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) throws Exception {
        
        String str = "JD\nJD\nJD"; 
        System.out.println(str);
        System.out.println(str.lines().collect(Collectors.toList()));
    }
}

De uitvoer van de bovenstaande code is: strip(), stripLeading(), stripTrailing() strip() – Verwijdert de witruimte aan het begin en het einde van de string.

Maar we hebben al trim(). Wat is dan de noodzaak van strip()? strip() is een “Unicode-bewuste” evolutie van trim(). Toen trim() werd geïntroduceerd, was Unicode nog niet geëvolueerd. Nu verwijdert de nieuwe strip() alle soorten spaties aan het begin en einde (controleer de methode Character.isWhitespace(c) om te weten of een unicode een spatie is of niet).

Een voorbeeld met de bovenstaande drie methoden wordt hieronder gegeven:

public class Main {
    public static void main(String[] args) throws Exception {
        // Jouw code hier!
        
        String str = " JD "; 
        System.out.print("Start");
        System.out.print(str.strip());
        System.out.println("End");
        
        System.out.print("Start");
        System.out.print(str.stripLeading());
        System.out.println("End");
        
        System.out.print("Start");
        System.out.print(str.stripTrailing());
        System.out.println("End");
    }
}

De uitvoer in de console van de bovenstaande code is: repeat(int) De repeat-methode herhaalt eenvoudigweg de string zo vaak als vermeld in de methode in de vorm van een int.

public class Main {
    public static void main(String[] args) throws Exception {
        // Jouw code hier!
        
        String str = "=".repeat(2);
        System.out.println(str); //prints ==
    }
}

4.3) Lokale variabele syntaxis voor lambda-parameters

JEP 323, Lokale Variabele Syntax voor Lambda Parameters is de enige taalfunctie release in Java 11. In Java 10 werd Lokale Variabele Type Inferentie geïntroduceerd. Dus konden we het type van de variabele afleiden uit de RHS – var list = new ArrayList<String>(); JEP 323 staat toe dat var wordt gebruikt om de formele parameters van een impliciet getypeerde lambda-expressie te declareren. We kunnen nu definiëren:

(var s1, var s2) -> s1 + s2

Dit was ook mogelijk in Java 8 maar werd verwijderd in Java 10. Nu is het terug in Java 11 om dingen uniform te houden. Maar waarom is dit nodig als we het type in de lambda gewoon kunnen overslaan? Als je een annotatie zoals @Nullable wilt toepassen, kun je dat niet doen zonder het type te definiëren. Beperking van deze functie – Je moet het type var specificeren voor alle parameters of geen. Dingen zoals het volgende zijn niet mogelijk:

(var s1, s2) -> s1 + s2 //no skipping allowed
(var s1, String y) -> s1 + y //no mixing allowed

var s1 -> s1 //not allowed. Need parentheses if you use var in lambda.

4.4) Op toegang gebaseerde nesting van toegangsbeheer

Voor Java 11 was dit mogelijk:

public class Main {
 
    public void myPublic() {
    }
 
    private void myPrivate() {
    }
 
    class Nested {
 
        public void nestedPublic() {
            myPrivate();
        }
    }
}

de private methode van de hoofdklasse is toegankelijk vanuit de bovenliggende geneste klasse op bovenstaande manier. Maar als we Java Reflection gebruiken, zal het een IllegalStateException opleveren.

Method method = ob.getClass().getDeclaredMethod("myPrivate");
method.invoke(ob);

Java 11 adresseert dit probleem met betrekking tot geneste toegangscontrole in reflectie. java.lang.Class introduceert drie methoden in de reflectie-API: getNestHost(), getNestMembers() en isNestmateOf().

4.5) JEP 309: Dynamische klassebestandsconstanten

Het Java-klassenbestandsformaat breidt nu de ondersteuning uit voor een nieuwe constante poolvorm, CONSTANT_Dynamic. Het doel van deze JEP is om de kosten en verstoring van het ontwikkelen van nieuwe vormen van materialiseerbare klassenbestandsbeperkingen te verminderen, door een enkele nieuwe constante-poolvorm te creëren die kan worden geparametriseerd met door de gebruiker geleverd gedrag. Dit verbetert de prestaties

4.6) JEP 318: Epsilon: een No-Op Garbage Collector

In tegenstelling tot de JVM-GC die verantwoordelijk is voor het toewijzen en vrijgeven van geheugen, wijst Epsilon alleen geheugen toe. Het wijst geheugen toe voor de volgende zaken:

  • Prestatietests.
  • Geheugendruktests.
  • VM-interface tests.
  • Extreem kortstondige taken.
  • Laatste druppel latentieverbeteringen.
  • Laatste druppel doorvoerverbeteringen.

Nu is Elipson alleen nog goed voor testomgevingen. Het zal leiden tot een OutOfMemoryError in productie en de applicaties laten crashen. Het voordeel van Elipson is dat er geen geheugenopruimingskosten zijn. Daarom zal het een nauwkeurig testresultaat van de prestaties geven en kunnen we het niet langer stoppen met GC’en. Opmerking: Dit is een experimentele functie.

4.7) JEP 320: Verwijder de Java EE- en CORBA-modules

De modules waren al verouderd in Java 9. Ze zijn nu volledig verwijderd. De volgende pakketten zijn verwijderd: java.xml.ws, java.xml.bind, java.activation, java.xml.ws.annotation, java.corba, java.transaction, java.se.ee, jdk.xml.ws, jdk.xml.bind

4.8) JEP 328: Flight Recorder

De Flight Recorder, die eerder een commerciële add-on was in Oracle JDK, is nu open source sinds Oracle JDK zelf niet meer gratis is. JFR is een profileringsinstrument dat wordt gebruikt om diagnostische en profileringsgegevens te verzamelen van een draaiende Java-toepassing. De prestatieoverhead is verwaarloosbaar en ligt meestal onder de 1%. Daarom kan het worden gebruikt in productietoepassingen.

4.9) JEP 321: HTTP-client

Java 11 standaardiseert de Http-client API. De nieuwe API ondersteunt zowel HTTP/1.1 als HTTP/2. Het is ontworpen om de algehele prestaties van het verzenden van verzoeken door een client en het ontvangen van antwoorden van de server te verbeteren. Het ondersteunt ook native WebSockets.

4.10) Lezen/Schrijven van Strings naar en van de Bestanden

Java 11 streeft ernaar om het lezen en schrijven van Strings handiger te maken. Het heeft de volgende methoden geïntroduceerd voor het lezen en schrijven naar/van de bestanden:

  • readString()
  • writeString()

Het volgende codevoorbeeld toont een voorbeeld hiervan.

Path path = Files.writeString(Files.createTempFile("test", ".txt"), "This was posted on JD");
System.out.println(path);
String s = Files.readString(path);
System.out.println(s); //This was posted on JD

4.11) JEP 329: ChaCha20 en Poly1305 Cryptografische Algoritmes

Java 11 biedt implementaties van de ChaCha20 en ChaCha20-Poly1305 cijferalgoritmes. Deze algoritmes zullen worden geïmplementeerd in de SunJCE-provider.

4.12) JEP 315: Verbeter Aarch64 Intrinsieken

Verbeter de bestaande string- en array-intrinsieken, en implementeer nieuwe intrinsieken voor de java.lang.Math sin, cos en log functies, op AArch64-processors.

4.13) JEP 333: ZGC: Een Schaalbare Low-Latency Garbage Collector (Experimenteel)

Java 11 heeft een low latency GC geïntroduceerd. Dit is een experimentele functie. Het is goed om te zien dat Oracle belang hecht aan GC’s.

4.14) JEP 335: Nashorn JavaScript Engine Deprecatie

De Nashorn JavaScript-scriptengine en API’s zijn verouderd, wat aangeeft dat ze zullen worden verwijderd in de daaropvolgende releases.

5. Conclusie

We hebben de belangrijke functies en updates doorgenomen die worden geboden in Java 11. Tot ziens wanneer Java 12 wordt uitgebracht.

Source:
https://www.digitalocean.com/community/tutorials/java-11-features