Η Oracle ανακοινώνει τη Java 16
13:10 - 23 Μαρτίου 2021
Η Oracle ανακοίνωσε σήμερα την έναρξη διαθεσιμότητας της Java 16 (Oracle JDK 16), συμπεριλαμβανομένων 17 νέων βελτιώσεων στην πλατφόρμα οι οποίες θα αυξήσουν ακόμα περισσότερο την παραγωγικότητα των προγραμματιστών. Το πιο πρόσφατο Java Development Kit (JDK) οριστικοποίησε το Pattern Matching for instanceof (JEP 394) και Records (JEP 395), βελτιώσεις γλώσσας που τέθηκαν σε φάση προεπισκόπησης στη Java 14. Επιπλέον, οι προγραμματιστές μπορούν να χρησιμοποιούν το Packaging Tool (JEP 392) για να παραδίδουν αυτόνομες εφαρμογές Java, καθώς και να εξερευνήσουν τρία χαρακτηριστικά σε φάση εξέλιξης, τα Vector API (JEP 338), Foreign Linker API (JEP 389) και Foreign-Memory Access API (JEP 389), καθώς και ένα χαρακτηριστικό σε φάση προεπισκόπησης, το Sealed Classes (JEP 397).
Η Oracle παρέχει ενημερώσεις για τη Java κάθε έξι μήνες, ώστε να έχουν οι προγραμματιστές ένα προγραμματισμένο χρονοδιάγραμμα εκδόσεων. Έτσι εξασφαλίζεται σταθερή ροή καινοτομιών και, ταυτόχρονα, επιτυγχάνεται συνεχής βελτίωση επιδόσεων, σταθερότητας και ασφάλειας, αυξάνοντας τη διείσδυση της Java σε οργανισμούς και κλάδους κάθε μεγέθους.
Ο Georges Saab, Vice President Development, Java Platform Group, Oracle, δήλωσε: «H αποτελεσματικότητα της εξαμηνιαίας ροής εκδόσεων αναδείχτηκε με την πιο πρόσφατη έκδοση. Τα Pattern Matching και Records παρουσιάστηκαν ένα χρόνο πριν ως μέρη του JDK 14 και έκτοτε έχουν υποβληθεί σε πολλαπλούς κύκλους παροχής σχολίων από την κοινότητα με βάση τη χρήση τους σε πραγματικές συνθήκες. Η διαδικασία αυτή δίνει στους προγραμματιστές Java την ευκαιρία να πειραματιστούν με αυτά τα χαρακτηριστικά προτού οριστικοποιηθούν, αλλά επίσης επιτρέπει να ενσωματωθούν σχόλια ζωτικής σημασίας, με αποτέλεσμα δύο στιβαρά JEP (προτάσεις βελτίωσης Java) που πραγματικά ανταποκρίνονται στις ανάγκες της κοινότητας.»
Η Java 16 είναι αποτέλεσμα ανάπτυξης από το σύνολο του κλάδου, με ανοικτές αναθεωρήσεις, εβδομαδιαία build και εκτενή συνεργασία ανάμεσα σε μηχανικούς της Oracle και μέλη της κοινότητας προγραμματιστών Java ανά τον κόσμο μέσω της Κοινότητας OpenJDK και του προγράμματος Java Community Process. Τα νέα χαρακτηριστικά που παρέχονται με τη Java 16 είναι:
Βελτιώσεις γλώσσας που πρωτοπαρουσιάστηκαν στο JDK 14 και οριστικοποιήθηκαν στο JDK 16
- JEP 394: Pattern Matching for instanceof – Βελτιώνει τη γλώσσα προγραμματισμού Java με αντιστοίχιση βάσει μοτίβων για τον τελεστή instanceof.
- JEP 395: Records – Βελτιώνει τη γλώσσα προγραμματισμού Java με εγγραφές (records), οι οποίες είναι κλάσεις που λειτουργούν ως διαφανείς φορείς αμετάβλητων δεδομένων. Μπορούμε να αντιληφθούμε τις εγγραφές ως ονομαστικές πλειάδες (nominal tuples).
Νέο εργαλείο για βελτίωση της παραγωγικότητας των προγραμματιστών
JEP 392: Packaging Tool – Παρέχει το εργαλείο jpackage, για δημιουργία πακέτων αυτόνομων εφαρμογών Java.
Βελτιωμένη διαχείριση μνήμης για βελτίωση της απόδοσης
- JEP 387: Elastic Metaspace – Επιστρέφει τη μη χρησιμοποιούμενη μνήμη μεταδεδομένων κλάσεων HotSpot (δηλ. metaspace) στο λειτουργικό σύστημα πιο άμεσα, μειώνει το αποτύπωμα του metaspace και απλοποιεί τον κώδικα metaspace ώστε να μειωθούν τα κόστη συντήρησης.
- JEP 376: ZGC: Concurrent Thread-Stack Processing – Μετακινεί την επεξεργασία νήματος-στοίβας (thread-stack) ZGC από τα safepoints σε μια ταυτόχρονη φάση. Αυτή η εργασία εξαλείφει το τελευταίο σημαντικό σημείο συμφόρησης για να επιτραπεί η ταυτόχρονη επεξεργασία στοίβας.
Βελτιωμένη δικτύωση για βελτίωση της παραγωγικότητας και ευελιξίας των προγραμματιστών
- JEP 380: UNIX-Domain Socket Channels – Προσθέτει υποστήριξη για όλα τα χαρακτηριστικά των sockets του τομέα UNIX που είναι κοινά στις κύριες πλατφόρμες UNIX και τα Windows για τα API καναλιών socket και καναλιών server-socket στο πακέτο java.nio.channels. Τα socket τομέα UNIX χρησιμοποιούνται για επικοινωνίες μεταξύ διεργασιών (IPC) στον ίδιο host. Είναι παρεμφερή με τα sockets TCP/IP από τις περισσότερες απόψεις, εκτός από το ότι διευθυνσιοδοτούνται με ονομασίες διαδρομών του συστήματος αρχείων και όχι με διευθύνσεις του Πρωτοκόλλου Internet (IP) και αριθμούς θυρών.
Θέματα σχετικά με περιπτώσεις κώδικα που θα γίνει μελλοντικά μη συμβατός
- JEP 396: Strongly Encapsulate JDK Internals by Default – Στο JDK 9 εφαρμόσαμε έντονη ενθυλάκωση νέων εσωτερικών στοιχείων API, περιορίζοντας έτσι την πρόσβαση σε αυτά. Ωστόσο, ως βοήθημα για την μετάβαση, το JDK 9 επέλεξε ηθελημένα να μην εφαρμόσει έντονη ενθυλάκωση κατά το χρόνο εκτέλεσης του περιεχομένου πακέτων που υπήρχαν στο JDK 8. Το JDK 16 ενισχύει αυτόν τον περιορισμό ενθυλακώνοντας τα περισσότερα εσωτερικά στοιχεία του JDK από προεπιλογή, εκτός για κρίσιμης σημασίας εσωτερικά API όπως το sun.misc.Unsafe. Οι τελικοί χρήστες εξακολουθούν να μπορούν να επιλέξουν τη χαλαρή έντονη ενθυλάκωση που έχει υπάρξει προεπιλογή από το JDK 9. Αυτό θα ενθαρρύνει τους προγραμματιστές να κάνουν τη μετάβαση από τη χρήση εσωτερικών στοιχείων στη χρήση τυποποιημένων API, ώστε τόσο οι ίδιοι όσο και οι χρήστες τους να μπορούν να κάνουν αναβάθμιση χωρίς ταλαιπωρία σε μελλοντικές εκδόσεις της Java.
- JEP 390: Warnings for Value-Based Classes – Προσδιορίζει τις πρωτογενείς κλάσεις περιτύλιξης (wrapper) ως βασιζόμενες σε τιμές και αποσύρει τα ορίσματα κατασκευής (constructors) για κατάργηση, εγείροντας νέες προειδοποιήσεις απόσυρσης. Παρέχει προειδοποιήσεις σχετικά με μη κατάλληλες προσπάθειες συγχρονισμού σε παρουσίες (instances) οποιωνδήποτε κλάσεων που βασίζονται σε τιμές στην Πλατφόρμα Java.
Χαρακτηριστικά σε φάση εξέλιξης και προεπισκόπησης
- JEP 338: Vector API (Incubator) – Παρέχει μια αρχική εκδοχή μιας λειτουργικής μονάδας incubator, την jdk.incubator.vector, για έκφραση διανυσματικών υπολογισμών που μεταγλωττίζονται κατά την εκτέλεση σε βέλτιστες διανυσματικές οδηγίες υλικού στις υποστηριζόμενες αρχιτεκτονικές CPU.
- JEP 389: Foreign Linker API (Incubator) – Εισάγει ένα API που παρέχει πρόσβαση με στατική σύνταξη καθαρής Java στον εγγενή κώδικα.
- JEP 393: Foreign-Memory Access API (Third Incubator) – Εισάγει ένα API για να επιτρέψει στα προγράμματα Java να έχουν ασφαλή και αποτελεσματική πρόσβαση σε ξένη μνήμη έξω από το heap της Java.
- JEP 397: Sealed Classes (Second Preview) – Βελτιώνει τη γλώσσα προγραμματισμού Java με σφραγισμένες (sealed) κλάσεις και διεπαφές. Οι σφραγισμένες κλάσεις και διεπαφές περιορίζουν το ποιες άλλες κλάσεις ή διεπαφές μπορούν να επεκτείνουν ή να υλοποιήσουν τις πρώτες.
Βελτιώσεις για τους συνεισφέροντες στο OpenJDK
- JEP 347: Enable C++14 Language Features (in the JDK source code) – Επιτρέπει τη χρήση χαρακτηριστικών της γλώσσας C++14 στον πηγαίο κώδικα C++ του JDK, και δίνει συγκεκριμένη καθοδήγηση σχετικά με το ποια από αυτά τα χαρακτηριστικά μπορούν να χρησιμοποιηθούν σε κώδικα HotSpot.
- JEP 357: Migrate from Mercurial to Git – Εκτελεί μετάβαση των αποθετηρίων πηγαίου κώδικα της Κοινότητας OpenJDK Community από Mercurial (hg) σε Git.
- JEP 369: Migrate to GitHub – Φιλοξενεί τα αποθετήρια Git της Κοινότητας OpenJDK στο GitHub.
Νέες προδιαγραφές αλλαγής πλατφόρμας (Porting) παρέχουν υποστήριξη για τη Java σε περισσότερες πλατφόρμες
- JEP 386: Alpine Linux Port – Εκτελεί αλλαγή πλατφόρμας (Porting) για το JDK σε Alpine Linux, καθώς και σε άλλες διανομές Linux που χρησιμοποιούν την musl ως βασική βιβλιοθήκη C, τόσο στην αρχιτεκτονική x64 όσο και στην AArch64.
- JEP 388: Windows/Aarch64 Port – Εκτελεί αλλαγή πλατφόρμας (Porting) για το JDK σε Windows/AArch64.
Διαρκής βελτίωση της Java
Η Java παραμένει ανάμεσα στις πιο επιτυχημένες πλατφόρμες ανάπτυξης λογισμικού που έχουν δημιουργηθεί ποτέ, βασιζόμενη στη συνεχή καινοτομία για να καλύπτει τις εξελισσόμενες ανάγκες των σύγχρονων προγραμματιστών εφαρμογών. Για να εμπλουτίσει ακόμα περισσότερο το πρόγραμμα συνδρομών Oracle Java SE για τους πελάτες, η Oracle προσέθεσε το GraalVM Enterprise ως παροχή. Το GraalVM είναι σε θέση να συνεισφέρει στη βελτίωση της απόδοσης και στη μείωση της ανάλωσης πόρων από τις εφαρμογές, ειδικά στα microservices και τις εγγενείς αρχιτεκτονικές cloud. Οι οργανισμοί που διαχειρίζονται ένα περιβάλλον Java αξιοποιώντας τη συνδρομή Oracle Java SE όχι μόνο επωφελούνται από τις πιο πρόσφατες βελτιώσεις και την άμεση πρόσβαση σε ειδικούς της Java στην Oracle, αλλά ταυτόχρονα πετυχαίνουν σημαντική εξοικονόμηση σε σχέση με άλλες προσεγγίσεις.
Ο Josι Paumard, επίκουρος καθηγητής, Πανεπιστήμιο Sorbonne Paris Nord και συνδιοργανωτής, Paris Java User Group, δήλωσε: «Αντί να αναζητώ κάθε τρία ή τέσσερα χρόνια νέα χαρακτηριστικά και βελτιώσεις στη Java, αυτή η ροή εκδόσεων με κρατάει σε εγρήγορση ως παθιασμένο προγραμματιστή, καθηγητή και εκπαιδευτή. “Περίμενα ανυπόμονα τη χρήση του Records για να βελτιώσω την απόδοση και την αναγνωσιμότητα του κώδικά μου όσον αφορά την επεξεργασία δεδομένων, μπόρεσα να το χρησιμοποιήσω ως χαρακτηριστικό σε φάση προεπισκόπησης και τώρα διατίθεται μαζί με αυτήν την πιο πρόσφατη έκδοση.»
Οι προγραμματιστές μπορούν να μάθουν περισσότερα σχετικά με τη Java 16 και να αποκτήσουν πρακτική εμπειρία στο Oracle Developer Live: Java Innovations, 23, 25 και 30 Μαρτίου.