Wir haben uns noch nicht vollständig in Java 10 eingetaucht, und Java 11 ist bereits da. Java 11 ist aus mehr als nur ein paar Gründen wichtig. Oracle hat sein Support-Modell überarbeitet und einen Release-Zug entwickelt, der schnelle Updates, etwa alle 6 Monate, bringt. Sie haben das Lizenzierungs- und Support-Modell geändert, was bedeutet, dass, wenn Sie das Java 11 Oracle JDK herunterladen, dies kostenpflichtig für kommerzielle Nutzung sein wird.
Bedeutet das, dass ich jetzt für Java bezahlen muss? NEIN. Nicht unbedingt, es sei denn, Sie laden das Oracle JDK herunter und verwenden es in der Produktion.
Hinweis: IntelliJ IDEA 2018.2.4 Community Edition unterstützt bereits Java 11.
1. Warum ist Java 11 wichtig?
Java 11 ist die zweite LTS-Version nach Java 8. Seit Java 11 ist das Oracle JDK nicht mehr kostenlos für kommerzielle Nutzung verfügbar. Sie können es in Entwicklungsphasen verwenden, aber um es kommerziell zu nutzen, müssen Sie eine Lizenz erwerben. Andernfalls können Sie jederzeit eine Rechnung von Oracle erhalten! Java 10 war das letzte kostenlose Oracle JDK, das heruntergeladen werden konnte. Oracle beendet die Unterstützung für Java 8 seit Januar 2019. Sie müssen für weiteren Support bezahlen. Sie können es weiterhin verwenden, erhalten jedoch keine Patches/Sicherheitsupdates.
Oracle wird für keine einzelne Java-Version seit Java 11 kostenlose langfristige Unterstützung (LTS) bereitstellen.
Während Oracle JDK nicht mehr kostenlos ist, können Sie immer noch die Open JDK-Builds von Oracle oder anderen Anbietern wie AdoptOpenJDK, Azul, IBM, Red Hat usw. herunterladen. Meiner Meinung nach können Sie, es sei denn, Sie suchen nach einem Einsatz auf Unternehmensebene mit der Bereitschaft, für die Supportgebühren zu bezahlen, OpenJDK verwenden und sie bei Bedarf aktualisieren.
2. Welche JDK-Build sollte ich herunterladen und welche Vorteile haben sie jeweils?
Da Oracle einen Veröffentlichungszug erstellt hat, in dem alle sechs Monate eine neue Version erscheint, müssen Sie, wenn Sie das kostenlose Open JDK von Oracle verwenden, es alle sechs Monate aktualisieren, da Oracle keine kostenlosen Updates mehr bereitstellt, sobald die neue Version veröffentlicht wird. Dies kann für ein Unternehmen herausfordernd sein. Bezahlen Sie für kommerziellen Support bei Oracle und migrieren Sie nur von einer LTS-Version zur nächsten LTS-Version. Auf diese Weise erhalten Sie alle Updates und Unterstützung für Java 11 bis 2026. Sie können Java 17 im Jahr 2022 herunterladen. Bleiben Sie auch nach dem Ende des Supports bei der kostenlosen Java-Version. Sie erhalten jedoch keine Sicherheitsupdates, und es können Sicherheitslücken entstehen.
Oracle bietet keinen kommerziellen Support oder Updates für Java 9 und Java 10 an. Sie müssen nach anderen alternativen Builds suchen, um sie weiterhin kostenlos zu verwenden.
Nachdem wir das mit Java 11 verbundene Gepäck verstanden haben, wollen wir nun die wichtigen Funktionen in Java 11 für Entwickler analysieren. Wir werden auch einige wichtige JEPs besprechen. Hinweis: JavaFX wird als separates Modul verfügbar sein und nicht an den 6-monatigen Veröffentlichungszyklus des Java JDK gebunden sein.
3. Wie lade ich die kostenlose Version von Java 11 herunter?
Sie können die produktionsbereite OpenJDK-Version von diesem Link herunterladen. Die Binärdateien sind im Tar- oder Zip-Format, also entpacken Sie sie einfach und setzen Sie die Umgebungsvariablen, um den Java-Compiler und die Java-Befehle zu verwenden.
4. Java 11 Funktionen
Einige der wichtigen Java 11 Funktionen sind:
- Ausführen einer Java-Datei mit einem einzelnen Befehl
- Neue Hilfsmethoden in der String-Klasse
- Lokale Variablensyntax für Lambda-Parameter
- Basierend auf verschachteltem Zugriffskontroll
- JEP 321: HTTP-Client
- Lesen/Schreiben von Zeichenketten aus und in Dateien
- JEP 328: Flight Recorder
Lassen Sie uns die neuen Funktionen diskutieren, die mit Java 11 aus dem JEP-Prozess eingeführt wurden.
4.1) Ausführen der Java-Datei mit einem einzigen Befehl
Eine wichtige Änderung besteht darin, dass Sie die Java-Quellcodedatei nicht mehr zuerst mit dem javac
-Tool kompilieren müssen. Sie können die Datei direkt mit dem Befehl java ausführen, und sie wird implizit kompiliert. Diese Funktion fällt unter JEP 330. Hier ist ein Blick auf die neuen Methoden der Klasse Java String, die in Java 11 eingeführt wurden:
4.2) Java String Methoden
isBlank() – Diese Instanzmethode gibt einen booleschen Wert zurück. Leere Zeichenfolgen und Zeichenfolgen, die nur aus Leerzeichen bestehen, gelten als leer.
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
// Ihr 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() Diese Methode gibt einen Strom von Zeichenfolgen zurück, der eine Sammlung aller durch Zeilen getrennten Teilzeichenfolgen ist.
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()));
}
}
Die Ausgabe des obigen Codes ist: strip(), stripLeading(), stripTrailing()
strip()
– Entfernt die Leerzeichen sowohl am Anfang als auch am Ende der Zeichenfolge.
Aber wir haben bereits trim(). Was ist dann der Bedarf an strip()? strip()
ist eine „Unicode-aware“ Weiterentwicklung von trim()
. Als trim()
eingeführt wurde, war Unicode nicht weiterentwickelt. Jetzt entfernt das neue strip() alle Arten von Leerzeichen am Anfang und am Ende (überprüfen Sie die Methode Character.isWhitespace(c)
, um festzustellen, ob ein Unicode ein Leerzeichen ist oder nicht)
Ein Beispiel für die Verwendung der oben genannten drei Methoden ist unten angegeben:
public class Main {
public static void main(String[] args) throws Exception {
// Ihr 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");
}
}
Die Ausgabe in der Konsole aus dem obigen Code lautet: repeat(int) Die repeat-Methode wiederholt einfach den String so oft, wie in der Methode in Form eines int angegeben.
public class Main {
public static void main(String[] args) throws Exception {
// Ihr Code hier!
String str = "=".repeat(2);
System.out.println(str); //prints ==
}
}
4.3) Lokale Variablensyntax für Lambda-Parameter
JEP 323, Lokale Variablensyntax für Lambda-Parameter ist das einzige Sprachmerkmal, das in Java 11 veröffentlicht wurde. In Java 10 wurde Lokale Variablentypinferenz eingeführt. Somit konnten wir den Typ der Variablen von der RHS ableiten – var list = new ArrayList<String>();
JEP 323 erlaubt es, var
zu verwenden, um die formalen Parameter eines implizit typisierten Lambda-Ausdrucks zu deklarieren. Wir können jetzt definieren:
(var s1, var s2) -> s1 + s2
Dies war auch in Java 8 möglich, wurde jedoch in Java 10 entfernt. Jetzt ist es in Java 11 zurück, um die Dinge einheitlich zu halten. Aber warum ist das nötig, wenn wir den Typ im Lambda einfach weglassen können? Wenn Sie eine Annotation wie @Nullable anwenden müssen, können Sie das ohne Definition des Typs nicht tun. Einschränkung dieses Features – Sie müssen den Typ var bei allen Parametern angeben oder keinen. Dinge wie folgendes sind nicht möglich:
(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) Zugriffskontrolle basierend auf Verschachtelung
Vor Java 11 war dies möglich:
public class Main {
public void myPublic() {
}
private void myPrivate() {
}
class Nested {
public void nestedPublic() {
myPrivate();
}
}
}
Private Methode der Hauptklasse ist aus der oben verschachtelten Klasse auf die oben genannte Weise zugänglich. Aber wenn wir Java Reflection verwenden, wird es eine IllegalStateException
geben.
Method method = ob.getClass().getDeclaredMethod("myPrivate");
method.invoke(ob);
Java 11 adressiert diese Bedenken in der verschachtelten Zugriffssteuerung bei Reflection. java.lang.Class
führt drei Methoden in der Reflection-API ein: getNestHost()
, getNestMembers()
und isNestmateOf()
.
4.5) JEP 309: Dynamische Klassen-Dateikonstanten
Das Java-Klassen-Dateiformat erweitert nun die Unterstützung um eine neue Konstantenpool-Form, CONSTANT_Dynamic. Das Ziel dieses JEPs ist es, die Kosten und Unterbrechungen bei der Entwicklung neuer Formen materialisierbarer Klassen-Datei-Beschränkungen zu reduzieren, indem eine einzige neue Konstantenpool-Form geschaffen wird, die mit benutzerdefiniertem Verhalten parametrisiert werden kann. Dies verbessert die Leistung
4.6) JEP 318: Epsilon: Ein No-Op Garbage Collector
Im Gegensatz zum JVM-GC, der für die Zuweisung und Freigabe von Speicher verantwortlich ist, allokiert Epsilon nur Speicher. Es allokiert Speicher für folgende Zwecke:
- Performance-Tests.
- Tests zur Speicherbelastung.
- VM-Interface-Tests.
- Extrem kurzlebige Aufgaben.
- Verbesserungen der Latenz beim letzten Tropfen.
- Verbesserungen der Durchsatzleistung beim letzten Tropfen.
Jetzt ist Elipson nur noch für Testumgebungen geeignet. Es wird zu OutOfMemoryError in der Produktion führen und die Anwendungen zum Absturz bringen. Der Vorteil von Elipson liegt in keinem Speicherfreigabe-Overhead. Daher liefert es ein genaues Testergebnis der Leistung, und wir können es nicht mehr durch GC stoppen. Hinweis: Dies ist eine experimentelle Funktion.
4.7) JEP 320: Entfernen der Java EE- und CORBA-Module
Die Module wurden bereits in Java 9 veraltet. Sie sind jetzt vollständig entfernt. Folgende Pakete sind entfernt: 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
Flugdatenschreiber, der früher eine kommerzielle Ergänzung im Oracle JDK war, ist jetzt Open Source, da das Oracle JDK selbst nicht mehr kostenlos ist. JFR ist ein Profiling-Tool, das verwendet wird, um Diagnose- und Profildaten aus einer laufenden Java-Anwendung zu sammeln. Seine Leistungseinbußen sind vernachlässigbar und liegen normalerweise unter 1%. Daher kann es in Produktionsanwendungen verwendet werden.
4.9) JEP 321: HTTP-Client
Java 11 standardisiert das Http-Client-API. Die neue API unterstützt sowohl HTTP/1.1 als auch HTTP/2. Sie ist darauf ausgelegt, die Gesamtleistung beim Senden von Anfragen durch einen Client und beim Empfangen von Antworten vom Server zu verbessern. Sie unterstützt auch nativ WebSockets.
4.10) Lesen/Schreiben von Strings in/from den Dateien
Java 11 bemüht sich, das Lesen und Schreiben von Strings bequem zu gestalten. Es hat die folgenden Methoden für das Lesen und Schreiben in/von Dateien eingeführt:
- readString()
- writeString()
Der folgende Code zeigt ein Beispiel dafür
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 und Poly1305 kryptografische Algorithmen
Java 11 bietet Implementierungen der ChaCha20- und ChaCha20-Poly1305-Verschlüsselungsalgorithmen. Diese Algorithmen werden im SunJCE-Provider implementiert.
4.12) JEP 315: Verbesserung der Aarch64-Intrinsiken
Verbesserung der bestehenden String- und Array-Intrinsiken und Implementierung neuer Intrinsiken für die java.lang.Math sin, cos und log Funktionen auf AArch64-Prozessoren.
4.13) JEP 333: ZGC: Ein skalierbarer Low-Latency-Garbage-Collector (Experimentell)
Java 11 hat einen Low-Latency-GC eingeführt. Dies ist eine experimentelle Funktion. Es ist gut zu sehen, dass Oracle der GC eine Bedeutung beimisst.
4.14) JEP 335: Deprecate the Nashorn JavaScript Engine
Die Nashorn JavaScript-Skriptengine und APIs werden als veraltet markiert, was darauf hinweist, dass sie in den folgenden Versionen entfernt werden.
5. Fazit
Wir haben die wichtigen Funktionen und Updates in Java 11 durchgegangen. Wir sehen uns bald wieder, wenn Java 12 veröffentlicht wird.
Source:
https://www.digitalocean.com/community/tutorials/java-11-features