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

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

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

Στο πλαίσιο της προετοιμασίας για τη νέα έκδοση, η ανάπτυξη έχει μετακινηθεί από το σύστημα ελέγχου έκδοσης Mercurial στο Git και στην πλατφόρμα συνεργασίας ανάπτυξης GitHub. Η μετεγκατάσταση αναμένεται να βελτιώσει την απόδοση των λειτουργιών αποθετηρίου, να αυξήσει την αποδοτικότητα αποθήκευσης, να παρέχει πρόσβαση σε αλλαγές σε όλη την ιστορία του έργου, να βελτιώσει την υποστήριξη για έλεγχο κώδικα και να επιτρέψει στα API να αυτοματοποιήσουν τις ροές εργασίας. Επιπλέον, η χρήση του Git και του GitHub κάνει το έργο πιο ελκυστικό για αρχάριους και προγραμματιστές που είναι συνηθισμένοι στο Git.

Οι νέες δυνατότητες στην Java 16 περιλαμβάνουν:

  • Προστέθηκε πειραματική ενότητα jdk.incubator.vector με υλοποίηση του Vector API, το οποίο παρέχει λειτουργίες για υπολογισμούς διανυσμάτων που εκτελούνται χρησιμοποιώντας διανυσματικές οδηγίες στους επεξεργαστές x86_64 και AArch64 και επιτρέπουν την ταυτόχρονη εφαρμογή λειτουργιών σε πολλαπλές τιμές (SIMD). Σε αντίθεση με τις δυνατότητες που παρέχονται στον μεταγλωττιστή HotSpot JIT για αυτόματη διανυσματοποίηση βαθμωτών λειτουργιών, το νέο API σάς επιτρέπει να ελέγχετε ρητά τη διανυσματοποίηση για παράλληλη επεξεργασία δεδομένων.
  • Ο κώδικας JDK και VM HotSpot γραμμένος σε C++ επιτρέπεται να χρησιμοποιεί λειτουργίες που εισάγονται στην προδιαγραφή C++14. Προηγουμένως, επιτρέπονταν τα πρότυπα C++98/03.
  • Το ZGC (Z Garbage Collector), το οποίο λειτουργεί σε παθητική λειτουργία και ελαχιστοποιεί όσο το δυνατόν περισσότερο τις καθυστερήσεις λόγω συλλογής σκουπιδιών, έχει προσθέσει τη δυνατότητα παράλληλης επεξεργασίας στοίβων νημάτων χωρίς παύση των νημάτων της εφαρμογής. Το ZGC έχει πλέον μόνο εργασία που απαιτεί αναστολή, η οποία έχει συνεχείς καθυστερήσεις, που συνήθως δεν υπερβαίνουν μερικές εκατοντάδες μικροδευτερόλεπτα.
  • Προστέθηκε υποστήριξη για υποδοχές Unix (AF_UNIX) στις τάξεις SocketChannel, ServerSocketChannel και java.nio.channels.
  • Έχει υλοποιηθεί μια θύρα για τη διανομή Linux Alpine με την τυπική βιβλιοθήκη C musl, η οποία είναι δημοφιλής σε περιβάλλοντα για κοντέινερ, μικροϋπηρεσίες, cloud και ενσωματωμένα συστήματα. Η προτεινόμενη θύρα σε τέτοια περιβάλλοντα σάς επιτρέπει να εκτελείτε προγράμματα Java όπως κανονικές εφαρμογές. Επιπλέον, χρησιμοποιώντας το jlink, μπορείτε να αφαιρέσετε όλες τις αχρησιμοποίητες μονάδες και να δημιουργήσετε ένα ελάχιστο περιβάλλον επαρκές για την εκτέλεση της εφαρμογής, το οποίο σας επιτρέπει να δημιουργείτε συμπαγείς εικόνες για συγκεκριμένες εφαρμογές.
  • Ο μηχανισμός Elastic Metaspace έχει εφαρμοστεί, βελτιστοποιώντας τις λειτουργίες εκχώρησης και επιστροφής μνήμης που καταλαμβάνεται από μεταδεδομένα κλάσης (μεταχώρος) στο JVM HotSpot. Η χρήση του Elastic Metaspace μειώνει τον κατακερματισμό της μνήμης, μειώνει την επιβάρυνση του φορτωτή κλάσης και έχει επίσης ευεργετική επίδραση στην απόδοση των μακροχρόνιων εφαρμογών διακομιστή λόγω της ταχύτερης επιστροφής της μνήμης που καταλαμβάνεται από τα μεταδεδομένα κλάσης που δεν χρησιμοποιούνται στο λειτουργικό σύστημα. Για να επιλέξετε τη λειτουργία αποδέσμευσης μνήμης μετά την εκφόρτωση κλάσεων, προσφέρεται η επιλογή "-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)".
  • Προστέθηκε μια θύρα JDK για συστήματα Windows που λειτουργούν σε υλικό με επεξεργαστές που βασίζονται στην αρχιτεκτονική AArch64.
  • Μια τρίτη προεπισκόπηση του API Access Foreign-Memory έχει προταθεί, επιτρέποντας στις εφαρμογές Java να έχουν ασφαλή και αποτελεσματική πρόσβαση σε περιοχές μνήμης εκτός του σωρού Java, χειρίζοντας τις νέες αφαιρέσεις MemorySegment, MemoryAddress και MemoryLayout.
  • Έχει υλοποιηθεί ένα πειραματικό Foreign Linker API, παρέχοντας πρόσβαση από την Java στον εγγενή κώδικα. Μαζί με το Foreign-Memory API, η νέα διεπαφή προγραμματισμού διευκολύνει πολύ τη δημιουργία περιτυλιγμάτων πάνω από συμβατικές κοινόχρηστες βιβλιοθήκες.
  • Προστέθηκε το βοηθητικό πρόγραμμα jpackage, το οποίο σας επιτρέπει να δημιουργείτε πακέτα για αυτόνομες εφαρμογές Java. Το βοηθητικό πρόγραμμα βασίζεται στο javapackager από το JavaFX και σας επιτρέπει να δημιουργείτε πακέτα σε μορφές εγγενείς σε διάφορες πλατφόρμες (msi και exe για Windows, pkg και dmg για macOS, deb και rpm για Linux). Τα πακέτα περιλαμβάνουν όλες τις απαιτούμενες εξαρτήσεις.
  • Η αυστηρή ενθυλάκωση όλων των εσωτερικών στοιχείων του JDK είναι ενεργοποιημένη από προεπιλογή, με εξαίρεση τα κρίσιμα API, όπως το sun.misc.Unsafe. Η τιμή της επιλογής «--παράνομη πρόσβαση» έχει πλέον οριστεί σε «άρνηση» αντί για «άδεια» από προεπιλογή, η οποία θα αποκλείει τις προσπάθειες από τον κώδικα για πρόσβαση στις περισσότερες εσωτερικές κλάσεις, μεθόδους και πεδία. Για να παρακάμψετε τον περιορισμό, χρησιμοποιήστε την επιλογή "-illegal-access=permit".
  • Η εφαρμογή της αντιστοίχισης μοτίβων στον τελεστή "instanceof" έχει σταθεροποιηθεί, γεγονός που σας επιτρέπει να ορίσετε αμέσως μια τοπική μεταβλητή για αναφορά στην επιλεγμένη τιμή. Για παράδειγμα, μπορείτε να γράψετε αμέσως "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" χωρίς να ορίσετε ρητά το "String s = (String) obj". Ήταν: if (obj instanceof Group) { Group group = (Group) obj; var entries = group.getEntries(); } Τώρα μπορείτε να κάνετε χωρίς να ορίσετε το “Group group = (Group) obj”: if (obj instanceof Group Group) { var entries = group.getEntries(); }
  • Η υλοποίηση της λέξης-κλειδιού "record" έχει σταθεροποιηθεί, παρέχοντας μια συμπαγή μορφή για ορισμούς κλάσεων που εξαλείφει την ανάγκη να οριστούν ρητά διάφορες μέθοδοι χαμηλού επιπέδου, όπως τα equals(), hashCode() και toString() σε περιπτώσεις όπου αποθηκεύονται δεδομένα μόνο σε πεδία.με τα οποία δεν αλλάζει. Όταν μια κλάση χρησιμοποιεί τυπικές υλοποιήσεις των μεθόδων equals(), hashCode() και toString(), μπορεί να κάνει χωρίς τον ρητό ορισμό τους: δημόσια εγγραφή BankTransaction(LocalDate date, double ποσό, περιγραφή String) {}

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

  • Ένα δεύτερο προσχέδιο προτείνεται για σφραγισμένες κλάσεις και διεπαφές που δεν μπορούν να χρησιμοποιηθούν από άλλες κλάσεις και διεπαφές για κληρονομικότητα, επέκταση ή παράκαμψη υλοποιήσεων. Οι σφραγισμένες κλάσεις παρέχουν επίσης έναν πιο δηλωτικό τρόπο περιορισμού της χρήσης μιας υπερκλάσης από τους τροποποιητές πρόσβασης, με βάση τη ρητή λίστα των υποκλάσεων που επιτρέπονται για επέκταση. πακέτο com.example.geometry; δημόσια σφραγισμένη κατηγορία Άδειες σχήματος com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}

Πηγή: opennet.ru

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