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

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

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

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

  • Έχει προταθεί προκαταρκτική υποστήριξη για Scoped Values, η οποία επιτρέπει την κοινή χρήση αμετάβλητων δεδομένων σε νήματα και την αποτελεσματική ανταλλαγή δεδομένων μεταξύ θυγατρικών νημάτων (οι τιμές κληρονομούνται). Οι τιμές εμβέλειας αναπτύσσονται για να αντικαταστήσουν τον μηχανισμό τοπικών μεταβλητών νήματος και είναι πιο αποτελεσματικές όταν χρησιμοποιούνται πολύ μεγάλοι αριθμοί εικονικών νημάτων (χιλιάδες και εκατομμύρια νήματα). Η κύρια διαφορά μεταξύ των τιμών εύρους και των τοπικών μεταβλητών νήματος είναι ότι οι πρώτες γράφονται μία φορά, δεν μπορούν να αλλάξουν αργότερα και παραμένουν διαθέσιμες μόνο για τη διάρκεια της εκτέλεσης του νήματος. class Server { final static ScopedValue CURRENT_USER = new ScopedValue(); void serve(Αίτημα αιτήματος, απάντηση απόκρισης) { var level = ( request. isAuthorized()? ADMIN : GUEST); var user = νέος χρήστης(επίπεδο); ScopedValue.where(CURRENT_USER, χρήστης) .run(() -> Application.handle( request, response)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); εάν (!user.canOpen()) ρίξει νέο InvalidUserException(); επιστροφή νέας σύνδεσης DBC(…); } }
  • Προστέθηκε μια δεύτερη προσωρινή εφαρμογή μοτίβων εγγραφών, επεκτείνοντας την ικανότητα αντιστοίχισης προτύπων Java 16 για την ανάλυση των τιμών των κλάσεων εγγραφής τύπου. Για παράδειγμα: εγγραφή Point(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = px(); int y = py(); System.out.println(x+y); } }
  • Προστέθηκε μια τέταρτη προκαταρκτική εφαρμογή αντιστοίχισης προτύπων σε εκφράσεις διακόπτη, η οποία επιτρέπει τη χρήση ευέλικτων προτύπων σε ετικέτες πεζών-κεφαλαίων που καλύπτουν μια σειρά τιμών ταυτόχρονα, για τις οποίες είχαν χρησιμοποιηθεί προηγουμένως δυσκίνητες αλυσίδες δηλώσεων if...else. static String formatterPatternSwitch(Object obj) { return switch (obj) { 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(); }; }
  • Προστέθηκε μια δεύτερη προκαταρκτική υλοποίηση του API FFM (Foreign Function & Memory), το οποίο σας επιτρέπει να οργανώσετε την αλληλεπίδραση προγραμμάτων Java με εξωτερικό κώδικα και δεδομένα μέσω κλήσης λειτουργιών από εξωτερικές βιβλιοθήκες και πρόσβασης στη μνήμη εκτός του JVM.
  • Προστέθηκε μια δεύτερη προκαταρκτική υλοποίηση εικονικών νημάτων, τα οποία είναι ελαφριά νήματα που απλοποιούν σημαντικά τη σύνταξη και τη διατήρηση εφαρμογών πολλαπλών νημάτων υψηλής απόδοσης.
  • Μια δεύτερη παραλλαγή του πειραματικού Structured Parallelism API έχει προστεθεί για να απλοποιήσει την ανάπτυξη εφαρμογών πολλαπλών νημάτων αντιμετωπίζοντας πολλαπλές εργασίες που εκτελούνται σε διαφορετικά νήματα ως μια ενιαία μονάδα.
  • Προστέθηκε μια πέμπτη προκαταρκτική υλοποίηση του Vector API, παρέχοντας λειτουργίες για υπολογισμούς διανυσμάτων που εκτελούνται χρησιμοποιώντας διανυσματικές οδηγίες στους επεξεργαστές x86_64 και AArch64 και σας επιτρέπουν να εφαρμόζετε λειτουργίες σε πολλαπλές τιμές ταυτόχρονα (SIMD). Σε αντίθεση με τις δυνατότητες που παρέχονται στον μεταγλωττιστή HotSpot JIT για αυτόματη διανυσματοποίηση βαθμωτών λειτουργιών, το νέο API καθιστά δυνατό τον ρητό έλεγχο της διανυσματοποίησης για παράλληλη επεξεργασία δεδομένων.

Πηγή: opennet.ru

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