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

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

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

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

  • Προτείνεται μια πειραματική εφαρμογή αντιστοίχισης προτύπων σε εκφράσεις "διακόπτης", η οποία επιτρέπει τη χρήση όχι ακριβών τιμών σε ετικέτες "περίπτωσης", αλλά ευέλικτων προτύπων που καλύπτουν μια σειρά τιμών ταυτόχρονα, για τις οποίες προηγουμένως ήταν απαραίτητο να χρησιμοποιηθούν δυσκίνητες αλυσίδες εκφράσεων «αν...άλλο». Επιπλέον, ο «διακόπτης» έχει τη δυνατότητα να χειρίζεται NULL τιμές. Αντικείμενο o = 123L; String formatted = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); προεπιλογή -> o.toString(); };
  • Σταθεροποιημένη υποστήριξη για σφραγισμένες κλάσεις και διεπαφές, οι οποίες δεν μπορούν να χρησιμοποιηθούν από άλλες κλάσεις και διεπαφές για κληρονομικότητα, επέκταση ή παράκαμψη της υλοποίησης. Οι σφραγισμένες κλάσεις παρέχουν επίσης έναν πιο δηλωτικό τρόπο περιορισμού της χρήσης μιας υπερκλάσης από τους τροποποιητές πρόσβασης, με βάση τη ρητή λίστα των υποκλάσεων που επιτρέπονται για επέκταση. πακέτο com.example.geometry; δημόσια σφραγισμένη κατηγορία Άδειες σχήματος com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}
  • Προτείνεται μια δεύτερη προεπισκόπηση του Vector API, η οποία παρέχει λειτουργίες για υπολογισμούς διανυσμάτων που εκτελούνται με χρήση διανυσματικών οδηγιών στους επεξεργαστές x86_64 και AArch64 και επιτρέπουν την ταυτόχρονη εφαρμογή λειτουργιών σε πολλαπλές τιμές (SIMD). Σε αντίθεση με τις δυνατότητες που παρέχονται στον μεταγλωττιστή HotSpot JIT για αυτόματη διανυσματοποίηση βαθμωτών λειτουργιών, το νέο API καθιστά δυνατό τον ρητό έλεγχο της διανυσματοποίησης για παράλληλη επεξεργασία δεδομένων.
  • Προστέθηκε μια προεπισκόπηση του Foreign Function & Memory API, το οποίο επιτρέπει στις εφαρμογές να αλληλεπιδρούν με κώδικα και δεδομένα εκτός του χρόνου εκτέλεσης Java. Το νέο API σάς επιτρέπει να καλείτε αποτελεσματικά λειτουργίες που δεν είναι JVM και να έχετε πρόσβαση στη μνήμη που δεν διαχειρίζεται JVM. Για παράδειγμα, μπορείτε να καλέσετε συναρτήσεις από εξωτερικές κοινόχρηστες βιβλιοθήκες και να αποκτήσετε πρόσβαση σε δεδομένα διεργασίας χωρίς να χρησιμοποιήσετε το JNI.
  • Η μηχανή απόδοσης macOS που τροφοδοτεί το Java 2D API, το οποίο με τη σειρά του τροφοδοτεί το Swing API, έχει προσαρμοστεί για να χρησιμοποιεί το API γραφικών Metal. Η πλατφόρμα macOS συνεχίζει να χρησιμοποιεί το OpenGL από προεπιλογή και η ενεργοποίηση της υποστήριξης Metal απαιτεί τη ρύθμιση "-Dsun.java2d.metal=true" και τουλάχιστον την εκτέλεση του macOS 10.14.x.
  • Προστέθηκε μια θύρα για την πλατφόρμα macOS/AArch64 (υπολογιστές Apple βασισμένοι στα νέα τσιπ Apple M1). Ένα ιδιαίτερο χαρακτηριστικό της θύρας είναι η υποστήριξη του μηχανισμού προστασίας μνήμης W^X (Write XOR Execute), στον οποίο δεν είναι δυνατή η ταυτόχρονη πρόσβαση σε σελίδες μνήμης για εγγραφή και εκτέλεση. (Ο κώδικας μπορεί να εκτελεστεί μόνο αφού απενεργοποιηθεί η εγγραφή και η εγγραφή σε μια σελίδα μνήμης είναι δυνατή μόνο μετά την απενεργοποίηση της εκτέλεσης).
  • Επανήλθε στη χρήση μόνο σημασιολογικών αυστηρών fp για εκφράσεις κινητής υποδιαστολής. Η υποστήριξη για την «προεπιλεγμένη» σημασιολογία, που ήταν διαθέσιμη από την κυκλοφορία της Java 1.2, έχει διακοπεί, συμπεριλαμβανομένων των απλοποιήσεων για την εργασία σε συστήματα με πολύ παλιούς μαθηματικούς συνεπεξεργαστές x87 (μετά την έλευση των οδηγιών SSE2, η ανάγκη για πρόσθετη σημασιολογία εξαφανίστηκε).
  • Έχουν εφαρμοστεί νέοι τύποι διεπαφών σε γεννήτριες ψευδοτυχαίων αριθμών και έχουν εφαρμοστεί πρόσθετοι αλγόριθμοι για καλύτερη παραγωγή τυχαίων αριθμών. Δίνεται η δυνατότητα στις εφαρμογές να επιλέξουν έναν αλγόριθμο για τη δημιουργία ψευδοτυχαίων αριθμών. Βελτιωμένη υποστήριξη για τη δημιουργία ροών τυχαίων αντικειμένων.
  • Επιβολή αυστηρής ενθυλάκωσης όλων των εσωτερικών στοιχείων του JDK, με εξαίρεση τα κρίσιμα API όπως το sun.misc.Unsafe. Η αυστηρή ενθυλάκωση αποκλείει τις προσπάθειες από τον κώδικα για πρόσβαση σε εσωτερικές κλάσεις, μεθόδους και πεδία. Προηγουμένως, η λειτουργία αυστηρής ενθυλάκωσης μπορούσε να απενεργοποιηθεί χρησιμοποιώντας την επιλογή "--illegal-access=permit", αλλά αυτή έχει πλέον καταργηθεί. Οι εφαρμογές που απαιτούν πρόσβαση σε εσωτερικές κλάσεις, μεθόδους και πεδία θα πρέπει να τις ορίζουν ρητά χρησιμοποιώντας την επιλογή --add-opens ή το χαρακτηριστικό Add-Opens στο αρχείο μανιφέστου.
  • Δίνεται στις εφαρμογές η δυνατότητα να ορίζουν φίλτρα αποσειριοποίησης δεδομένων, τα οποία μπορούν να είναι ευαίσθητα στο περιβάλλον και να επιλέγονται δυναμικά με βάση συγκεκριμένες λειτουργίες αποσειριοποίησης. Τα καθορισμένα φίλτρα ισχύουν για ολόκληρη την εικονική μηχανή (JVM-wide), π.χ. καλύπτουν όχι μόνο την ίδια την εφαρμογή, αλλά και τις βιβλιοθήκες τρίτων που χρησιμοποιούνται στην εφαρμογή.
  • Το Swing πρόσθεσε τη μέθοδο javax.swing.filechooser.FileSystemView.getSystemIcon για τη φόρτωση μεγάλων εικονιδίων για τη βελτίωση της διεπαφής χρήστη σε οθόνες υψηλού DPI.
  • Το java.net.DatagramSocket API παρέχει υποστήριξη για σύνδεση σε ομάδες Multicast χωρίς την ανάγκη ξεχωριστού java.net.MulticastSocket API.
  • Το βοηθητικό πρόγραμμα IGV (Ideal Graph Visualizer) έχει βελτιωθεί, παρέχοντας διαδραστική απεικόνιση της ενδιάμεσης αναπαράστασης κώδικα στον μεταγλωττιστή HotSpot VM C2 JIT.
  • Στο JavaDoc, κατ' αναλογία με τον μεταγλωττιστή javac, όταν εμφανίζεται ένα σφάλμα, υποδεικνύεται πλέον ο αριθμός της προβληματικής γραμμής στο αρχείο προέλευσης και η θέση του σφάλματος.
  • Προστέθηκε η ιδιότητα native.encoding, αντικατοπτρίζοντας το όνομα της κωδικοποίησης χαρακτήρων του συστήματος (UTF-8, koi8-r, cp1251, κ.λπ.).
  • Η διεπαφή java.time.InstantSource έχει προστεθεί, επιτρέποντας τον χειρισμό του χρόνου χωρίς αναφορά σε ζώνη ώρας.
  • Προστέθηκε java.util.HexFormat API για μετατροπή σε δεκαεξαδική αναπαράσταση και αντίστροφα.
  • Μια λειτουργία μαύρης τρύπας έχει προστεθεί στον μεταγλωττιστή, η οποία απενεργοποιεί τις λειτουργίες εξάλειψης νεκρού κώδικα, οι οποίες μπορούν να χρησιμοποιηθούν κατά τη διεξαγωγή δοκιμών απόδοσης.
  • Προστέθηκε η επιλογή "-Xlog:async" στο Runtime για εγγραφή αρχείων καταγραφής σε ασύγχρονη λειτουργία.
  • Κατά τη δημιουργία ασφαλών συνδέσεων, το TLS 1.3 είναι ενεργοποιημένο από προεπιλογή (προηγουμένως χρησιμοποιήθηκε το TLS 1.2).
  • Το προηγουμένως δηλωμένο απαρχαιωμένο API Applet (java.applet.Applet*, javax.swing.JApplet), το οποίο χρησιμοποιήθηκε για την εκτέλεση εφαρμογών Java στο πρόγραμμα περιήγησης, έχει μετακινηθεί στην κατηγορία των χρονοπρογραμμάτων για κατάργηση (έχασε τη συνάφεια μετά το τέλος της υποστήριξης για την προσθήκη Java για προγράμματα περιήγησης).
  • Το Security Manager, το οποίο έχει χάσει εδώ και πολύ καιρό τη συνάφειά του και αποδείχθηκε ότι δεν είχε διεκδικηθεί μετά το τέλος της υποστήριξης για την προσθήκη του προγράμματος περιήγησης, μεταφέρθηκε στην κατηγορία εκείνων που έχουν προγραμματιστεί για κατάργηση.
  • Ο μηχανισμός ενεργοποίησης RMI έχει αφαιρεθεί, ο οποίος είναι ξεπερασμένος, υποβιβάζεται στην κατηγορία μιας επιλογής στην Java 8 και δεν χρησιμοποιείται σχεδόν ποτέ στη σύγχρονη πρακτική.
  • Ένας πειραματικός μεταγλωττιστής που υποστηρίζει JIT (ακριβώς έγκαιρα) για δυναμική μεταγλώττιση κώδικα Java για το HotSpot JVM, καθώς και τον τρόπο προκαταρκτικής μεταγλώττισης (AOT, εκ των προτέρων) κλάσεων σε κώδικα μηχανής πριν από την εκκίνηση της εικονικής μηχανής , έχει αφαιρεθεί από το SDK. Ο μεταγλωττιστής γράφτηκε σε Java και βασίστηκε στο έργο του έργου Graal. Σημειώνεται ότι η συντήρηση του μεταγλωττιστή απαιτεί πολλή εργασία, κάτι που δεν δικαιολογείται όταν δεν υπάρχει ζήτηση από προγραμματιστές.

Πηγή: opennet.ru

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