Νέες λειτουργίες στην Java 15

Νέες λειτουργίες στην Java 15

Η Java 15 είναι υπό ανάπτυξη. Η ημερομηνία διαθεσιμότητας είναι 15 Σεπτεμβρίου 2020. Ακόμα κι αν κάποια πράγματα μπορεί να αλλάξουν μέχρι εκείνη την ημερομηνία, έχουμε ήδη μια αρκετά σαφή ιδέα των περισσότερων λειτουργιών (features) που θα συμπεριληφθούν. Παρακάτω μπορείτε να βρείτε τη λίστα των χαρακτηριστικών, καθώς και κάποια εξήγηση του καθενός που λαμβάνονται από τη σελίδα OpenJDK.

Μπορείτε να κατεβάσετε ένα JDK build εδώ.

Νέες δυνατότητες στην Java 15

Previews/ incubator

Μια λειτουργία προεπισκόπησης (preview) είναι μια λειτουργία που έχει σχεδιαστεί, καθοριστεί και υλοποιηθεί, αλλά δεν είναι μόνιμη.

Μία λειτουργία εκκολαπτήριο (incubator) είναι είναι πειραματική. Βρίσκεται από το πακέτο jdk.incubator ώστε να επιτρέψει στους χρήστες να παρέχουν τα σχόλιά τους.

Sealed classes (Προεπισκόπηση)

Η γλώσσα προγραμματισμού Java ενισχύεται με sealed classes and interfaces. Οι sealed κλάσσεις και διεπαφές περιορίζουν ποιες άλλες κλάσσεις ή διεπαφές μπορούν να τις κάνουν extend ή implement.

Στο παρακάτω παράδειγμα δηλώνουμε ότι η κλάσση Σχήμα επιτρέπει τρεις υπο-κλάσσεις.

package com.example.geometry;

public sealed class Shape
    permits Circle, Rectangle, Square {...}

Pattern Matching for instanceof (Second Preview)

Η γλώσσα προγραμματισμού Java βελτιώνεται με αντιστοίχιση μοτίβων (pattern matching) για την παρουσία του τελεστή instanceof. Η αντιστοίχιση μοτίβων επιτρέπει την υπο όρους εύρεση στοιχείων και την έκφρασή τους με μία ακριβή μορφή. Ο σκοπός είναι να αποφεύγεται επαναλαμβανόμενος κώδικας που μπορεί να οδηγήσει σε λάθη και απροσεξίες. Ας δούμε ένα παράδειγμα παρακάτω.

Συχνά πρέπει να κάνουμε κάτι παρόμοιο με αυτό.

if (obj instanceof Integer) {
    Integer i = (Integer) obj;
    // do something with i
}

Αυτό είναι επιρρεπές σε λάθη και είναι επαναλαμβανόμενο. Αξιοσημείωτο είναι να κοιτάξουμε πόσες φορές δηλώνουμε τον ακέραιο. Αντί για αυτό, με την καινούρια λειτουργία της Java 15 μπορούμε να κάνουμε το εξής:

if (obj instanceof Integer i) {
    // do something with i 
} else {
    // cannot use i here
}

Οι μελλοντικές εργασίες σε αυτό το JEP θα περιλαμβάνουν πέρα από το if την ίδια λογική για άλλες δηλώσεις όπως η δήλωση switch.

Records (Second Preview)

Η γλώσσα προγραμματισμού Java βελτιώνεται με τις εγγραφές (records), οι οποίες είναι που λειτουργούν ως διαφανείς φορείς για αμετάβλητα (immutable) δεδομένα. Οι εγγραφές αυτές μπορούν να θεωρηθούν ως nominal tuples.

Foreign-Memory Access API (Second Incubator)

Ανεξάρτητες λειτουργίες

Edwards-Curve Digital Signature Algorithm (EdDSA)

Στην κρυπτογράφηση δημόσιου κλειδιού, ο αλγόριθμος ψηφιακής υπογραφής Edwards-Curve είναι ένας μαθηματικός συνδυασμός για την επαλήθευση της αυθεντικότητας των ψηφιακών μηνυμάτων. Αυτή η δυνατότητα υλοποιεί κρυπτογραφικές υπογραφές χρησιμοποιώντας τον αλγόριθμο ψηφιακής υπογραφής Edwards-Curve (EdDSA), όπως περιγράφεται στο RFC 8032.

παράδειγμα: δημιουργία ζεύγους κλειδιών και υπογραφή
// example: generate a key pair and sign
KeyPairGenerator kpg = KeyPairGenerator.getInstance("Ed25519");
KeyPair kp = kpg.generateKeyPair();
// algorithm is pure Ed25519
Signature sig = Signature.getInstance("Ed25519");
sig.initSign(kp.getPrivate());
sig.update(msg);
byte[] s = sig.sign();

// example: use KeyFactory to contruct a public key
KeyFactory kf = KeyFactory.getInstance("EdDSA");
boolean xOdd = ...
BigInteger y = ...
NamedParameterSpec paramSpec = new NamedParameterSpec("Ed25519");
EdECPublicKeySpec pubSpec = new EdECPublicKeySpec(paramSpec, new EdPoint(xOdd, y));
PublicKey pubKey = kf.generatePublic(pubSpec);

Κρυφές κλάσσεις (Hidden classes)

Οι κρυφές κλάσσεις είναι αυτές οι οποίες δεν μπορούν να χρησιμοποιηθούν απευθείας από τον bytecode άλλων κλάσσεων. Οι κρυφές κλάσσεις προορίζονται για έμμεση χρήση, μέσω reflection. Μια κρυφή κλάση μπορεί να οριστεί ως μέλος μιας access control nest και μπορεί να καταργηθεί η επιλογή της ανεξάρτητα από άλλες.

Text blocks

Προσθήκη ενός μπλοκ κειμένου στη γλώσσα Java. Ένα μπλοκ κειμένου είναι μια συμβολοσειρά πολλών γραμμών που καταργεί την ανάγκη για τις περισσότερες ακολουθίες διαφυγής (escape sequences), μορφοποιεί αυτόματα τη συμβολοσειρά με προβλέψιμο τρόπο και δίνει στον προγραμματιστή τον έλεγχο της μορφής που χρειάζεται.

Deprecated – Reimplementation

Κατάργηση του μηχανισμού JavaScript του Nashorn

Κατάργηση του μηχανισμού scripting Nashorn JavaScript και τα API και το εργαλείο jjs. Ο μηχανισμός, τα API και το εργαλείο τέθηκαν ως deprecated για κατάργηση στην Java 11 με την πρόθεση να αφαιρεθεί σε μια μελλοντική έκδοση. Ο λόγος ήταν ότι η ομάδα προγραμματιστών θεώρησε δύσκολο να συνεχιστεί η ανάπτυξη /διατήρηση του.

Κατάργηση τα Solaris and SPARC Ports

Remove the Solaris and SPARC Ports

Αφαίρεση του πηγαίου κώδικα και δημιουργία υποστήριξης για τις θύρες Solaris/SPARC, Solaris/x64 και Linux/SPARC. Αυτές οι θύρες απορρίφθηκαν για κατάργηση στο JDK 14 με τη ρητή πρόθεση να τις καταργήσουν σε μια μελλοντική έκδοση.

Εφαρμογή εκ νέου του API datagramSocket παλαιού τύπου

Αντικαταστήστε τις υποκείμενες υλοποιήσεις των API java.net.DatagramSocket και java.net.MulticastSocket με απλούστερες και πιο σύγχρονες υλοποιήσεις που είναι εύκολο να διατηρηθούν.

Απενεργοποίηση και κατάργηση μεροληπτικού κλειδώματος (Disable and Deprecate Biased Locking)

Απενεργοποίηση του μεροληπτικού κλειδώματος από προεπιλογή και όλων των σχετικών επιλογών της γραμμής εντολών. Τα κέρδη που παρατηρήθηκαν στο παρελθόν είναι πολύ λιγότερο εμφανή σήμερα. Το γεγονός αυτό σε συνδυασμό με τη δυσκολία διατήρησής του οδήγησε στην απόφαση αυτή.

2 Νέοι συλλέκτες απορριμμάτων (Garbage Collectors)

Ο συλλέκτης απορριμμάτων είναι ένας αυτόματος διαχειριστής μνήμης που ελευθερώνει μνήμη καταργώντας αντικείμενα που δεν χρειάζονται πλέον.

ZGC: Ένας επεκτάσιμος συλλέκτης απορριμμάτων χαμηλού λανθάνοντος χρόνου

Το έργο ZGC ξεκίνησε με την Java 11. Είναι ένα σύνθετο θέμα που έπρεπε να εισαχθεί σταδιακά για να επιτρέψει στους χρήστες να παρέχουν τα σχόλιά τους ώστε να διορθωθούν σφάλματα στην υλοποίηση. Στην Java 15 αυτή η υλοποίηση θεωρείται πλήρης και έτοιμη να χρησιμοποιηθεί σε λειτουργία παραγωγής.

Το ZGC μπορεί να ενεργοποιηθεί χρησιμοποιώντας τη γραμμή εντολών

-XX:+UnlockExperimentalVMOptions -XX:+UseZGC

Αυτή η υλοποίηση του συλλέκτη απορριμάτων δεν αλλάζει το προεπιλεγμένο που παραμένει ο G1.

Shenandoah: Ένας συλλέκτης απορριμάτων χαμηλής παύσης

Παρόμοια με ZGC εδώ Shenandoah είναι ένας συλλέκτης απορριμμάτων που είναι έτοιμος για την παραγωγή. Εισήχθη ως πειραματικός στην Java 12.

Μπορεί να ενεργοποιηθεί χρησιμοποιώντας την εντολή xx:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC.

  • Αυτή η υλοποίηση διατηρεί τον προεπιλεγμένο συλλέκτη απορριμμάτων G1.
Νέες λειτουργίες στην Java 15
Java 15

Συμπέρασμα

Η Java 15 έχει πολλά νέα χαρακτηριστικά να προσφέρει, όπως κάθε έκδοση. Αυτή η έκδοση προσθέτει περισσότερη αξία σετην java λόγω:

  • Αφαίρεσης των παλαιών βιβλιοθηκών και την αντικατάστασή τους με σύγχρονες
  • Δύο νέων συλλέκτων σκουπιδιών
  • Νέα χρήσιμα χαρακτηριστικά (κρυφές κλάσσεις, μπλοκ κειμένου, εγγραφές)

Αν θέλετε να διαβάσετε περισσότερα java ή την ανάπτυξη σχετικά άρθρα, ελέγξτε τη σελίδα άρθρα αυτής της ιστοσελίδας εδώ.

Leave a Comment