Προγραμματισμός

JDK 15: Οι νέες δυνατότητες στο Java 15

Το Java Development Kit 15, η εφαρμογή της επόμενης έκδοσης του Java SE (Standard Edition) από την Oracle, διατίθεται ως κυκλοφορία παραγωγής σήμερα, 15 Σεπτεμβρίου 2020. Τα κυριότερα σημεία του JDK 15 περιλαμβάνουν μπλοκ κειμένου, κρυφές κλάσεις, API πρόσβασης ξένων-μνήμης, το Z Garbage Collector, και προεπισκοπήσεις σφραγισμένων τάξεων, αντιστοίχισης προτύπων και εγγραφών.

Το JDK 15 είναι απλώς μια βραχυπρόθεσμη κυκλοφορία, μόνο για υποστήριξη με το Oracle Premier Support για έξι μήνες έως ότου το JDK 16 φτάσει τον επόμενο Μάρτιο. Το JDK 17, η επόμενη έκδοση μακροπρόθεσμης υποστήριξης, που θα υποστηριχθεί από την Oracle για οκτώ χρόνια, έχει προγραμματιστεί να φτάσει ένα έτος από τώρα, σύμφωνα με τον εξάμηνο ρυθμό κυκλοφορίας της Oracle για εκδόσεις Java SE.

Οι προγραμματιστές μπορούν να δουν το JDK 15 τώρα για να πάρουν μια ιδέα για το τι θα είναι στο JDK 17, δήλωσε ο Georges Saab, πρόεδρος της Java Platform Group της Oracle. Η τρέχουσα κυκλοφορία LTS είναι το JDK 11, το οποίο έφτασε τον Σεπτέμβριο του 2018. Οι κυκλοφορίες LTS φτάνουν κάθε τρία χρόνια. Το JDK 15 ακολουθεί το JDK 14, το οποίο κυκλοφόρησε στις 17 Μαρτίου 2020.

Οι νέες δυνατότητες και οι αλλαγές στο OpenJDK 15:

  • Ένας δεύτερος επωαστής ενός API πρόσβασης ξένης μνήμης, το οποίο θα επέτρεπε στα προγράμματα Java να έχουν ασφαλή και αποτελεσματική πρόσβαση σε ξένη μνήμη εκτός του σωρού Java. Το API θα πρέπει να μπορεί να λειτουργεί σε διάφορα είδη ξένης μνήμης, όπως εγγενής, επίμονη και διαχειριζόμενη στοίβα. Πολλά προγράμματα Java έχουν πρόσβαση σε ξένη μνήμη, όπως το Ignite και το MapDB. Το API θα βοηθούσε στην αποφυγή του κόστους και του απρόβλεπτου που σχετίζεται με τη συλλογή απορριμμάτων, την κοινή χρήση μνήμης σε όλες τις διαδικασίες και την σειριοποίηση και αποεπιεριοποίηση του περιεχομένου μνήμης χαρτογραφώντας αρχεία στη μνήμη. Το Java API προς το παρόν δεν παρέχει ικανοποιητική λύση για πρόσβαση σε ξένη μνήμη. Αλλά με τη νέα πρόταση, το API δεν θα πρέπει να υπονομεύει την ασφάλεια του JVM. Αυτή η ικανότητα περνά από μια προηγούμενη φάση επωαστήρα στο JDK 14, με βελτιώσεις που προσφέρονται στο JDK 15.
  • Προεπισκόπηση σφραγισμένων τάξεων. Μαζί με διεπαφές, οι κλειστές τάξεις περιορίζουν ποιες άλλες κατηγορίες ή διεπαφές μπορούν να επεκτείνουν ή να τις εφαρμόσουν. Στόχοι αυτής της δυνατότητας περιλαμβάνουν τη δυνατότητα στον συγγραφέα μιας κλάσης ή διεπαφής να ελέγχει ποιος κώδικας είναι υπεύθυνος για την εφαρμογή του, να παρέχει έναν πιο δηλωτικό τρόπο από τους τροποποιητές πρόσβασης για τον περιορισμό της χρήσης ενός superclass και να υποστηρίζει μελλοντικές οδηγίες στην αντιστοίχιση μοτίβων με την υποστήριξη του εξαντλητικού ανάλυση των προτύπων.
  • Κατάργηση πηγαίου κώδικα και υποστήριξη build για θύρες Solaris / SPARC, Solaris / x64 και Linux / SPARC, οι οποίες καταργήθηκαν για κατάργηση στο JDK 14 με σκοπό την κατάργησή τους σε μελλοντική έκδοση. Πολλά έργα και χαρακτηριστικά που βρίσκονται σε εξέλιξη, όπως τα Valhalla, Loom και Panama απαιτούν σημαντικές αλλαγές στην αρχιτεκτονική CPU και στον κώδικα του λειτουργικού συστήματος. Η μείωση της υποστήριξης για τις θύρες Solaris και SPARC θα επιτρέψει στους συνεισφέροντες στην κοινότητα OpenJDK να επιταχύνουν την ανάπτυξη νέων δυνατοτήτων που θα προωθήσουν την πλατφόρμα. Τόσο το Solaris όσο και το SPARC έχουν αντικατασταθεί τα τελευταία χρόνια από τους επεξεργαστές Linux OS και Intel.
  • Οι εγγραφές, οι οποίες είναι τάξεις που ενεργούν ως διαφανείς φορείς για αμετάβλητα δεδομένα, θα συμπεριληφθούν σε μια δεύτερη έκδοση προεπισκόπησης στο JDK 15, μετά το ντεμπούτο τους ως μια πρώιμη προεπισκόπηση στο JDK 14. Οι στόχοι του σχεδίου περιλαμβάνουν τη δημιουργία αντικειμενοστρεφής κατασκευής που εκφράζει μια απλή συγκέντρωση τιμών, βοηθώντας τους προγραμματιστές να επικεντρωθούν στη μοντελοποίηση αμετάβλητων δεδομένων παρά στην επεκτάσιμη συμπεριφορά, την αυτόματη εφαρμογή μεθόδων που βασίζονται σε δεδομένα, όπως ισότιμοι και αξιολογητές, και τη διατήρηση μακροχρόνιων αρχών Java, όπως ονομαστική πληκτρολόγηση και συμβατότητα μετεγκατάστασης. Οι εγγραφές μπορούν να θεωρηθούν ως ονομαστικές πλειάδες.
  • Κρυπτογραφικές υπογραφές βασισμένες στον Αλγόριθμο Ψηφιακής Υπογραφής Edwards-Curve (EdDSA). Το EdDSA είναι ένα σύγχρονο σχήμα ελλειπτικής καμπύλης με πλεονεκτήματα σε σχέση με τα υπάρχοντα σχήματα υπογραφής στο JDK. Το EdDSA θα εφαρμοστεί μόνο στον πάροχο SunEC. Το EdDSA είναι σε ζήτηση λόγω της βελτιωμένης ασφάλειας και της απόδοσής του σε σύγκριση με άλλα σχήματα υπογραφής. υποστηρίζεται ήδη σε βιβλιοθήκες κρυπτογράφησης όπως το OpenSSL και το BoringSSL.
  • Εκ νέου εφαρμογή του παλαιού API DatagramSocket αντικαθιστώντας τις υποκείμενες υλοποιήσεις τουjava.net.datagram.Socket και java.net.MulticastSocket API με απλούστερες και πιο σύγχρονες εφαρμογές που 1. είναι εύκολο να εντοπιστούν και να συντηρηθούν και 2. λειτουργούν με εικονικά νήματα που βρίσκονται υπό διερεύνηση στο Project Loom. Το νέο σχέδιο είναι συνέχεια της πρότασης 353 του JDK Enhancement που επαναπροσέγγισε το παλαιό API Socket. Οι τρέχουσες υλοποιήσεις του java.net.datagram.Socket και java.net.MulticastSocket χρονολογείται από το JDK 1.0 και μια εποχή που το IPv6 ήταν ακόμη υπό ανάπτυξη. Έτσι, η τρέχουσα εφαρμογή τουΠολλαπλή υποδοχή προσπαθεί να συνδυάσει το IPv4 και το IPv6 με τρόπους που είναι δύσκολο να διατηρηθούν.
  • Απενεργοποίηση προκαθορισμένου κλειδώματος από προεπιλογή και κατάργηση όλων των σχετικών επιλογών γραμμής εντολών. Ο στόχος είναι να προσδιοριστεί η ανάγκη για συνεχή υποστήριξη της δαπανηρής βελτιστοποίησης συγχρονισμού κληρονομιάς του προκατειλημμένου κλειδώματος, η οποία χρησιμοποιείται στην εικονική μηχανή HotSpot για τη μείωση της επιβάρυνσης του ανεξέλεγκτου κλειδώματος. Παρόλο που ορισμένες εφαρμογές Java ενδέχεται να δουν μια παλινδρόμηση στην απόδοση με απενεργοποιημένο το μεροληπτικό κλείδωμα, τα κέρδη απόδοσης του μεροληπτικού κλειδώματος είναι γενικά λιγότερο εμφανή από ό, τι ήταν.
  • Μια δεύτερη προεπισκόπηση της αντιστοίχισης μοτίβων για παράδειγμα, μετά από μια προηγούμενη προεπισκόπηση στο JDK 14. Η αντιστοίχιση μοτίβων επιτρέπει την κοινή λογική σε ένα πρόγραμμα, κυρίως την υπό όρους εξαγωγή στοιχείων από αντικείμενα, να εκφράζονται πιο εύκολα και συνοπτικά. Γλώσσες όπως οι Haskell και C # έχουν αγκαλιάσει το μοτίβο που ταιριάζει για τη συντομία και την ασφάλειά του.
  • Οι κρυφές τάξεις, δηλαδή οι κλάσεις που δεν μπορούν να χρησιμοποιηθούν απευθείας από τον κωδικό bytec άλλων τάξεων, προορίζονται για χρήση από πλαίσια που δημιουργούν τάξεις κατά το χρόνο εκτέλεσης και τα χρησιμοποιούν έμμεσα μέσω προβληματισμού. Μια κρυφή κλάση μπορεί να οριστεί ως μέλος μιας φωλιάς ελέγχου πρόσβασης και μπορεί να εκφορτωθεί ανεξάρτητα από άλλες κατηγορίες. Η πρόταση θα βελτιώσει την αποτελεσματικότητα όλων των γλωσσών στο JVM, επιτρέποντας σε ένα τυπικό API να καθορίζει κρυφές κλάσεις που δεν είναι ανιχνεύσιμες και έχουν περιορισμένο κύκλο ζωής. Τα πλαίσια εντός και εκτός του JDK θα μπορούσαν να δημιουργήσουν δυναμικά μαθήματα που θα μπορούσαν αντ 'αυτού να ορίσουν κρυφές κλάσεις. Πολλές γλώσσες που βασίζονται στο JVM βασίζονται σε δυναμική παραγωγή τάξης για ευελιξία και αποδοτικότητα. Οι στόχοι αυτής της πρότασης περιλαμβάνουν: επιτρέποντας στα πλαίσια να ορίσουν τις κατηγορίες ως μη-ανακαλύψιμες λεπτομέρειες εφαρμογής του πλαισίου, έτσι ώστε να μην μπορούν να συνδεθούν με άλλες τάξεις ούτε να ανακαλυφθούν μέσω προβληματισμού. υποστήριξη για επέκταση μιας φωλιάς ελέγχου πρόσβασης με μη ανακαλύψιμες τάξεις · και υποστήριξη για επιθετική εκφόρτωση μη ανακαλύψιμων τάξεων, έτσι τα πλαίσια έχουν την ευελιξία να καθορίζουν όσα χρειάζεται. Ένας άλλος στόχος είναι η κατάργηση του μη τυπικού API,misc.Unsafe :: defineAnonymousClass, με την πρόθεση να καταργηθεί για κατάργηση σε μελλοντική έκδοση. Επίσης, η γλώσσα Java δεν πρέπει να αλλάξει ως αποτέλεσμα αυτής της πρότασης.
  • Ο Z Garbage Collector (ZGC) αποφοιτά από ένα πειραματικό χαρακτηριστικό σε ένα προϊόν βάσει αυτής της πρότασης. Ενσωματωμένο στο JDK 11, το οποίο έφτασε τον Σεπτέμβριο του 2018, το ZGC είναι ένας συλλέκτης απορριμμάτων χαμηλής καθυστέρησης. Το ZGC παρουσιάστηκε ως πειραματική ικανότητα, επειδή οι προγραμματιστές της Java αποφάσισαν ότι ένα χαρακτηριστικό αυτού του μεγέθους και η πολυπλοκότητα θα έπρεπε να εισαχθεί προσεκτικά και σταδιακά. Έκτοτε, έχουν προστεθεί αρκετές βελτιώσεις, που κυμαίνονται από την ταυτόχρονη εκφόρτωση τάξης, την αποσύνδεση της αχρησιμοποίητης μνήμης και την υποστήριξη για κοινή χρήση δεδομένων κατηγορίας έως τη βελτιωμένη ευαισθητοποίηση NUMA και την προ-επαφή πολλαπλών νημάτων. Επίσης, το μέγιστο μέγεθος σωρού αυξήθηκε από τέσσερα terabyte σε 16 terabyte. Το ZGC αντιμετωπίζει προβλήματα απόδοσης σε εφαρμογές που περιλαμβάνουν τεράστιες ποσότητες δεδομένων, όπως μηχανική εκμάθηση, όπου οι χρήστες θέλουν να είναι σίγουροι ότι η επεξεργασία δεδομένων δεν θα υπόκειται σε απρόβλεπτες ή μεγάλες παύσεις λόγω της συλλογής απορριμμάτων. Οι πλατφόρμες που υποστηρίζονται περιλαμβάνουν Linux, Windows και MacOS.
  • Τα μπλοκ κειμένου, με προεπισκόπηση τόσο στο JDK 14 όσο και στο JDK 13, αποσκοπούν στην απλοποίηση του έργου της σύνταξης προγραμμάτων Java, διευκολύνοντας την έκφραση συμβολοσειρών που εκτείνονται σε πολλές γραμμές πηγαίου κώδικα, αποφεύγοντας παράλληλα τις ακολουθίες διαφυγής σε κοινές περιπτώσεις. Ένα μπλοκ κειμένου είναι μια κυριολεκτική συμβολοσειρά πολλαπλών γραμμών που αποφεύγει την ανάγκη για τις περισσότερες ακολουθίες διαφυγής, μορφοποιεί αυτόματα τη συμβολοσειρά με προβλέψιμο τρόπο και προσφέρει στον προγραμματιστή τον έλεγχο της μορφής όταν είναι επιθυμητό. Ένας στόχος της πρότασης μπλοκ κειμένου είναι η ενίσχυση της αναγνωσιμότητας των συμβολοσειρών σε προγράμματα Java που δηλώνουν κώδικα γραμμένο σε γλώσσες εκτός Java. Ένας άλλος στόχος είναι να υποστηρίξει τη μετανάστευση από τα γράμματα των συμβολοσειρών, ορίζοντας ότι κάθε νέο κατασκεύασμα μπορεί να εκφράσει το ίδιο σύνολο συμβολοσειρών με ένα γραμματοσειρά γραμματοσειράς, να ερμηνεύσει τις ίδιες ακολουθίες διαφυγής και να χειραγωγηθεί με τον ίδιο τρόπο όπως μια γραμματοσειρά συμβολοσειράς. Οι προγραμματιστές του OpenJDK ελπίζουν να προσθέσουν ακολουθίες διαφυγής για τη διαχείριση του σαφούς λευκού χώρου και του ελέγχου γραμμής.
  • Ο συλλέκτης σκουπιδιών Shenandoah χαμηλού χρόνου παύσης θα γίνει χαρακτηριστικό παραγωγής και θα απομακρυνόταν από το πειραματικό στάδιο. Είχε ενσωματωθεί στο JDK 12 πριν από ένα χρόνο.
  • Η αφαίρεση του Nashorn, η οποία έκανε το ντεμπούτο του στο JDK 8 τον Μάρτιο του 2014, αλλά έκτοτε έχει καταστεί άνευ αντικειμένου από τεχνολογίες όπως το GraalVM. Η πρόταση OpenJDK 15 ζητά την κατάργηση API Nashorn και το εργαλείο γραμμής εντολών jjs που χρησιμοποιείται για την επίκληση του Nashorn.
  • Κατάργηση του μηχανισμού ενεργοποίησης RMI, για μελλοντική αφαίρεση. Ο μηχανισμός ενεργοποίησης RMI είναι ένα ξεπερασμένο μέρος του RMI που είναι προαιρετικό από την Java 8. Η ενεργοποίηση RMI επιβάλλει συνεχή επιβάρυνση συντήρησης. Κανένα άλλο μέρος του RMI δεν θα καταργηθεί.
$config[zx-auto] not found$config[zx-overlay] not found