Κυκλοφορία Java SE 15

Μετά από έξι μήνες ανάπτυξης, η Oracle απελευθερώθηκε η πλατφόρμα JavaSE 15 (Java Platform, Standard Edition 15), το έργο OpenJDK ανοιχτού κώδικα χρησιμοποιείται ως υλοποίηση αναφοράς. Το Java SE 15 διατηρεί συμβατότητα προς τα πίσω με προηγούμενες εκδόσεις της πλατφόρμας Java· όλα τα έργα Java που έχουν γραφτεί προηγουμένως θα λειτουργούν χωρίς αλλαγές όταν κυκλοφορήσουν στη νέα έκδοση. Έτοιμες για εγκατάσταση εκδόσεις Java SE 15 (JDK, JRE και Server JRE) έτοιμος για Linux (x86_64), Windows και macOS. Υλοποίηση αναφοράς που αναπτύχθηκε από το έργο OpenJDK Java 15 είναι πλήρως ανοιχτού κώδικα με την άδεια GPLv2, με εξαιρέσεις GNU ClassPath που επιτρέπουν τη δυναμική σύνδεση με εμπορικά προϊόντα.

Το Java SE 15 ταξινομείται ως έκδοση γενικής υποστήριξης και θα συνεχίσει να λαμβάνει ενημερώσεις μέχρι την επόμενη έκδοση. Ο κλάδος Long Term Support (LTS) θα πρέπει να είναι η Java SE 11, η οποία θα συνεχίσει να λαμβάνει ενημερώσεις μέχρι το 2026. Ο προηγούμενος κλάδος LTS της Java 8 θα υποστηρίζεται μέχρι τον Δεκέμβριο του 2020. Η επόμενη κυκλοφορία του LTS έχει προγραμματιστεί για τον Σεπτέμβριο του 2021. Να σας υπενθυμίσουμε ότι ξεκινώντας με την κυκλοφορία της Java 10, το έργο μεταπήδησε σε μια νέα διαδικασία ανάπτυξης, υποδηλώνοντας έναν πιο σύντομο κύκλο για τη δημιουργία νέων εκδόσεων. Νέα λειτουργικότητα αναπτύσσεται τώρα σε έναν συνεχώς ενημερωμένο κύριο κλάδο, ο οποίος περιλαμβάνει έτοιμες αλλαγές και από τον οποίο διακλαδίζονται υποκαταστήματα κάθε έξι μήνες για τη σταθεροποίηση των νέων εκδόσεων.

από καινοτομίες Java 15 μπορεί κανείς να σημάδι:

  • Ενσωματωμένο υποστήριξη για τον αλγόριθμο δημιουργίας ψηφιακής υπογραφής EdDSA (Edwards-Curve Digital Signature Algorithm) RFC 8032). Η προτεινόμενη υλοποίηση EdDSA δεν εξαρτάται από πλατφόρμες υλικού, προστατεύεται από επιθέσεις πλευρικού καναλιού (εξασφαλίζεται ο σταθερός χρόνος όλων των υπολογισμών) και είναι ταχύτερη σε απόδοση από την υπάρχουσα υλοποίηση ECDSA γραμμένη σε γλώσσα C, με το ίδιο επίπεδο προστασίας. Για παράδειγμα, η EdDSA που χρησιμοποιεί μια ελλειπτική καμπύλη με κλειδί 126 bit παρουσιάζει παρόμοια απόδοση με την ECDSA με μια ελλειπτική καμπύλη secp256r1 και ένα κλειδί 128 bit.
  • Προστέθηκε πειραματική υποστήριξη για σφραγισμένες κλάσεις και διεπαφές, οι οποίες δεν μπορούν να χρησιμοποιηθούν από άλλες κλάσεις και διεπαφές για να κληρονομήσουν, να επεκτείνουν ή να παρακάμψουν την υλοποίηση. Οι σφραγισμένες κλάσεις παρέχουν επίσης έναν πιο δηλωτικό τρόπο περιορισμού της χρήσης μιας υπερκλάσης από τους τροποποιητές πρόσβασης, με βάση τη ρητή λίστα των υποκλάσεων που επιτρέπονται για επέκταση.

    πακέτο com.example.geometry;

    δημόσια σφραγισμένη τάξη Σχήμα
    permits com.example.polar.Circle,
    com.example.quad.Rectangle,
    com.example.quad.simple.Square {…}

  • Προστέθηκε υποστήριξη για κρυφές κλάσεις που δεν μπορούν να χρησιμοποιηθούν απευθείας από τον bytecode άλλων κλάσεων. Ο βασικός σκοπός των κρυφών κλάσεων είναι να χρησιμοποιηθούν σε πλαίσια που δημιουργούν δυναμικά κλάσεις κατά την εκτέλεση και τις χρησιμοποιούν έμμεσα, μέσω αντανάκλαση. Τέτοιες κλάσεις έχουν συνήθως περιορισμένο κύκλο ζωής, επομένως η διατήρησή τους για πρόσβαση από στατικά παραγόμενες κλάσεις δεν δικαιολογείται και θα οδηγήσει μόνο σε αυξημένη κατανάλωση μνήμης. Οι κρυφές κλάσεις εξαλείφουν επίσης την ανάγκη για το μη τυπικό API sun.misc.Unsafe::defineAnonymousClass, το οποίο πρόκειται να καταργηθεί στο μέλλον.
  • Ο συλλέκτης απορριμμάτων ZGC (Z Garbage Collector) έχει σταθεροποιηθεί και αναγνωρίζεται ως έτοιμος για ευρεία χρήση. Το ZGC λειτουργεί σε παθητική λειτουργία, ελαχιστοποιεί όσο το δυνατόν περισσότερο την καθυστέρηση λόγω συλλογής σκουπιδιών (ο χρόνος αδράνειας όταν χρησιμοποιείτε το ZGC δεν υπερβαίνει τα 10 ms.) και μπορεί να λειτουργήσει τόσο με μικρούς όσο και με τεράστιους σωρούς, μεγέθους από αρκετές εκατοντάδες megabyte έως πολλά terabyte.
  • Σταθεροποιήθηκε και βρέθηκε έτοιμο για γενική χρήση
    συλλέκτης σκουπιδιών Shenandoah, δουλεύοντας με ελάχιστες παύσεις (Low-Pause-Time Garbage Collector). Το Shenandoah αναπτύχθηκε από την Red Hat και είναι αξιοσημείωτο για τη χρήση ενός αλγορίθμου που μειώνει τον χρόνο ακινητοποίησης κατά τη συλλογή σκουπιδιών εκτελώντας εκκαθάριση παράλληλα με την εκτέλεση εφαρμογών Java. Το μέγεθος των καθυστερήσεων που εισάγει ο συλλέκτης σκουπιδιών είναι προβλέψιμο και δεν εξαρτάται από το μέγεθος του σωρού, δηλ. για σωρούς 200 MB και 200 ​​GB οι καθυστερήσεις θα είναι ίδιες (μην βγεις πέρα από 50 ms και συνήθως εντός 10 ms).

  • Η υποστήριξη έχει σταθεροποιηθεί και εισαχθεί στη γλώσσα μπλοκ κειμένου - μια νέα μορφή γραμματοσειρών συμβολοσειρών που σας επιτρέπει να συμπεριλάβετε δεδομένα κειμένου πολλών γραμμών στον πηγαίο κώδικα χωρίς να χρησιμοποιήσετε τη διαφυγή χαρακτήρων και τη διατήρηση της αρχικής μορφοποίησης κειμένου στο μπλοκ. Το μπλοκ πλαισιώνεται από τρία διπλά εισαγωγικά.

    Για παράδειγμα, αντί για τον κωδικό

    Συμβολοσειρά html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Η Java 1 είναι εδώ!\" » +
    "\n\t" + " » +
    "\n" + " ";

    μπορείτε να ορίσετε:

    String html = """


    »Java 1\
    είναι εδώ!

    """;

  • Επανασχεδιασμένο API παλαιού τύπου DatagramSocket. Οι παλιές υλοποιήσεις του java.net.DatagramSocket και του java.net.MulticastSocket έχουν αντικατασταθεί με μια σύγχρονη υλοποίηση που είναι πιο εύκολο να εντοπιστεί και να διατηρηθεί και είναι επίσης συμβατή με εικονικές ροές που αναπτύχθηκαν στο πλαίσιο του έργου Αργαλειός. Σε περίπτωση πιθανής ασυμβατότητας με τον υπάρχοντα κώδικα, η παλιά υλοποίηση δεν έχει αφαιρεθεί και μπορεί να ενεργοποιηθεί χρησιμοποιώντας την επιλογή jdk.net.usePlainDatagramSocketImpl.
  • Προτάθηκε δεύτερη πειραματική εφαρμογή αντιστοίχιση μοτίβων στον τελεστή "instanceof", ο οποίος σας επιτρέπει να ορίσετε αμέσως μια τοπική μεταβλητή για πρόσβαση στην επιλεγμένη τιμή. Για παράδειγμα, μπορείτε να γράψετε αμέσως "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" χωρίς να ορίσετε ρητά το "String s = (String) obj".

    Ήταν:

    if (obj instanceof Group) {
    Ομάδα ομάδας = (Ομάδα) obj;
    var entries = group.getEntries();
    }

    Τώρα μπορείτε να κάνετε χωρίς τον ορισμό "Group group = (Group) obj":

    if (obj instanceof Group Group) {
    var entries = group.getEntries();
    }

  • Προτεινόμενα δεύτερη πειραματική εφαρμογή της λέξης-κλειδιού "ρεκόρ", η οποία παρέχει μια συμπαγή μορφή για τον ορισμό κλάσεων, επιτρέποντάς σας να αποφύγετε τον ρητό ορισμό διαφόρων μεθόδων χαμηλού επιπέδου, όπως equals(), hashCode() και toString() σε περιπτώσεις όπου τα δεδομένα αποθηκεύονται μόνο σε πεδία των οποίων η συμπεριφορά δεν αλλάζει. Όταν μια κλάση χρησιμοποιεί τυπικές υλοποιήσεις των μεθόδων equals(), hashCode() και toString(), μπορεί να κάνει χωρίς τον ρητό ορισμό τους:

    δημόσια εγγραφή Τραπεζική Συναλλαγή (Τοπική ημερομηνία,
    διπλάσιο ποσό
    Περιγραφή συμβολοσειράς) {}

    Αυτή η δήλωση θα προσθέσει αυτόματα υλοποιήσεις των μεθόδων equals(), hashCode() και toString() εκτός από τις μεθόδους κατασκευής και λήψης.

  • Προτάθηκε μια δεύτερη προεπισκόπηση του API Πρόσβασης ξένης μνήμης, που επιτρέπει στις εφαρμογές Java να έχουν ασφαλή και αποτελεσματική πρόσβαση σε περιοχές μνήμης εκτός του σωρού Java, χειρίζοντας τις νέες αφαιρέσεις MemorySegment, MemoryAddress και MemoryLayout.
  • άτομα με ειδικές ανάγκες και κατάργησε την τεχνική βελτιστοποίησης Biased Locking που χρησιμοποιείται στο HotSpot JVM για τη μείωση των επιβαρύνσεων κλειδώματος. Αυτή η τεχνική έχει χάσει τη συνάφειά της σε συστήματα με ατομικές οδηγίες που παρέχονται από σύγχρονες CPU και είναι πολύ εντατική για να διατηρηθεί λόγω της πολυπλοκότητάς της.
  • Ανακοινώθηκε ξεπερασμένος μηχανισμός Ενεργοποίηση RMI, το οποίο θα καταργηθεί σε μελλοντική κυκλοφορία. Σημειώνεται ότι η Ενεργοποίηση RMI είναι ξεπερασμένη, υποβιβάζεται στην κατηγορία της επιλογής στην Java 8 και δεν χρησιμοποιείται σχεδόν ποτέ στη σύγχρονη πρακτική.
  • Διαγράφηκε Μηχανή JavaScript Nashorn, το οποίο καταργήθηκε στην Java SE 11.
  • Καταργήθηκε θύρες για Solaris OS και επεξεργαστές SPARC (Solaris/SPARC, Solaris/x64 και Linux/SPARC). Η κατάργηση αυτών των θυρών θα επιτρέψει στην κοινότητα να επιταχύνει την ανάπτυξη νέων λειτουργιών OpenJDK χωρίς να χάνει χρόνο για τη διατήρηση συγκεκριμένων χαρακτηριστικών του Solaris και του SPARC.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο