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

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

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

από καινοτομίες Java 14 μπορεί κανείς να σημάδι:

  • Προστέθηκε πειραματική υποστήριξη αντιστοίχιση μοτίβων στον τελεστή "instanceof", ο οποίος σας επιτρέπει να ορίσετε αμέσως μια τοπική μεταβλητή για πρόσβαση στην επιλεγμένη τιμή. Για παράδειγμα, μπορείτε να γράψετε αμέσως "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" χωρίς να ορίσετε ρητά το "String s = (String) obj".

    Ήταν:

    if (obj instanceof Group) {
    Ομάδα ομάδας = (Ομάδα) obj;
    var entries = group.getEntries();
    }

    Τώρα μπορείτε να κάνετε χωρίς τον ορισμό "Group group = (Group) obj":

    if (obj instanceof Group Group) {
    var entries = group.getEntries();
    }

  • Προστέθηκε πειραματική υποστήριξη για τη νέα λέξη-κλειδί "ρεκόρ", η οποία παρέχει μια συμπαγή μορφή για τον ορισμό κλάσεων, επιτρέποντάς σας να αποφύγετε τον ρητό ορισμό διαφόρων μεθόδων χαμηλού επιπέδου, όπως equals(), hashCode() και toString() σε περιπτώσεις όπου τα δεδομένα αποθηκεύονται μόνο σε πεδία των οποίων η συμπεριφορά δεν αλλάζει. Όταν μια κλάση χρησιμοποιεί τυπικές υλοποιήσεις των μεθόδων equals(), hashCode() και toString(), μπορεί να κάνει χωρίς τον ρητό ορισμό τους:

    δημόσια εγγραφή Τραπεζική Συναλλαγή (Τοπική ημερομηνία,
    διπλάσιο ποσό
    Περιγραφή συμβολοσειράς) {}

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

  • Τυποποιημένο και η υποστήριξη για μια νέα μορφή εκφράσεων "switch" είναι ενεργοποιημένη από προεπιλογή, η οποία δεν απαιτεί τον καθορισμό του τελεστή "break", σας επιτρέπει να συνδυάζετε επαναλαμβανόμενες ετικέτες και μπορεί να χρησιμοποιηθεί όχι μόνο με τη μορφή τελεστή, αλλά και ως έκφραση.

    var log = διακόπτης (γεγονός) {
    περίπτωση PLAY -> "Ο χρήστης ενεργοποίησε το κουμπί αναπαραγωγής";
    περίπτωση STOP, PAUSE -> "Ο χρήστης χρειάζεται διάλειμμα";
    προεπιλογή -> {
    Μήνυμα συμβολοσειράς = event.toString();
    LocalDateTime now = LocalDateTime.now();
    απόδοση "Άγνωστο συμβάν" + μήνυμα +
    » συνδεδεμένος » + τώρα;
    }
    };

  • Διευρυμένη πειραματική υποστήριξη μπλοκ κειμένου - μια νέα μορφή γραμματοσειρών συμβολοσειρών που σας επιτρέπει να συμπεριλάβετε δεδομένα κειμένου πολλών γραμμών στον πηγαίο κώδικα χωρίς να χρησιμοποιήσετε τη διαφυγή χαρακτήρων και τη διατήρηση της αρχικής μορφοποίησης κειμένου στο μπλοκ. Το μπλοκ πλαισιώνεται από τρία διπλά εισαγωγικά. Στην Java 14, τα μπλοκ κειμένου υποστηρίζουν τώρα την ακολουθία διαφυγής "\s" για να ορίσει ένα ενιαίο διάστημα και το "\" για να συνδεθεί με την επόμενη γραμμή (αγνοώντας τις νέες γραμμές όταν χρειάζεται να εκτυπώσετε μια πολύ μεγάλη γραμμή). Για παράδειγμα, αντί για τον κωδικό

    Συμβολοσειρά html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Η Java 1 είναι εδώ!\" » +
    "\n\t" + " » +
    "\n" + " ";

    μπορείτε να ορίσετε:

    String html = """


    »Java 1\
    είναι εδώ!

    """;

  • Το περιεχόμενο πληροφοριών των διαγνωστικών όταν συμβαίνουν εξαιρέσεις έχει επεκταθεί NullPointerException. Ενώ προηγουμένως το μήνυμα σφάλματος αναφερόταν μόνο στον αριθμό γραμμής, τώρα περιγράφει λεπτομερώς ποια μέθοδος προκάλεσε την εξαίρεση. Τα σύνθετα διαγνωστικά ενεργοποιούνται επί του παρόντος μόνο όταν εκκινούνται με τη σημαία "-XX:+ShowCodeDetailsInExceptionMessages". Για παράδειγμα, κατά τον καθορισμό αυτής της σημαίας, η εξαίρεση στη γραμμή

    var name = user.getLocation().getCity().getName();

    θα οδηγήσει σε μήνυμα

    Εξαίρεση στο νήμα "main" java.lang.NullPointerException: Δεν είναι δυνατή η κλήση του "Location.getCity()"
    επειδή η τιμή επιστροφής του "User.getLocation()" είναι μηδενική
    στο NullPointerExample.main(NullPointerExample.java:5):5)

    γεγονός που καθιστά σαφές ότι η μέθοδος Location.getCity() δεν κλήθηκε και η User.getLocation() επέστρεψε μηδενική.

  • Εφαρμόστηκε Μια προεπισκόπηση του βοηθητικού προγράμματος jpackage, το οποίο σας επιτρέπει να δημιουργείτε πακέτα για αυτόνομες εφαρμογές Java. Το βοηθητικό πρόγραμμα βασίζεται στο javapackager από το JavaFX και σας επιτρέπει να δημιουργείτε πακέτα σε μορφές εγγενείς σε διάφορες πλατφόρμες (msi και exe για Windows, pkg και dmg για macOS, deb και rpm για Linux). Τα πακέτα περιλαμβάνουν όλες τις απαιτούμενες εξαρτήσεις.
  • Στον απορριμματοσυλλέκτη G1 προστέθηκε ένας νέος μηχανισμός εκχώρησης μνήμης που λαμβάνει υπόψη τις ιδιαιτερότητες της εργασίας σε μεγάλα συστήματα χρησιμοποιώντας την αρχιτεκτονική NUMA. Ο νέος εκχωρητής μνήμης ενεργοποιείται χρησιμοποιώντας τη σημαία «+XX:+UseNUMA» και μπορεί να βελτιώσει σημαντικά την απόδοση στα συστήματα NUMA.
  • Προστέθηκε API για επιτόπια παρακολούθηση συμβάντων JFR (JDK Flight Recorder), για παράδειγμα για οργάνωση συνεχούς παρακολούθησης.
  • Προστέθηκε Μονάδα jdk.nio.mapmode, η οποία προσφέρει νέες λειτουργίες (READ_ONLY_SYNC, WRITE_ONLY_SYNC) για τη δημιουργία αντιστοιχισμένων buffer byte (MappedByteBuffer) που αναφέρονται σε μη πτητική μνήμη (NVM).
  • Εφαρμόστηκε Μια προεπισκόπηση του API πρόσβασης ξένης μνήμης, που επιτρέπει στις εφαρμογές Java να έχουν πρόσβαση με ασφάλεια και αποτελεσματικότητα σε περιοχές μνήμης εκτός του σωρού Java, χειρίζοντας τις νέες αφαιρέσεις MemorySegment, MemoryAddress και MemoryLayout.
  • Ανακοινώθηκε καταργήθηκαν οι θύρες για τους επεξεργαστές Solaris OS και SPARC (Solaris/SPARC, Solaris/x64 και Linux/SPARC) με σκοπό την κατάργηση αυτών των θυρών στο μέλλον. Η κατάργηση αυτών των θυρών θα επιτρέψει στην κοινότητα να επιταχύνει την ανάπτυξη νέων λειτουργιών OpenJDK χωρίς να χάνει χρόνο για τη διατήρηση των ειδικών χαρακτηριστικών του Solaris και του SPARC.
  • Διαγράφηκε ο συλλέκτης σκουπιδιών CMS (Concurrent Mark Sweep), ο οποίος χαρακτηρίστηκε απαρχαιωμένος πριν από δύο χρόνια και παρέμεινε ασυντήρητος (το CMS αντικαταστάθηκε εδώ και πολύ καιρό από τον συλλέκτη απορριμμάτων G1). Εκτός, ανακοινώθηκε κατάργησε τη χρήση ενός συνδυασμού αλγορίθμων συλλογής σκουπιδιών ParallelScavenge και SerialOld (εκτελείται με τις επιλογές "-XX:+UseParallelGC -XX:-UseParallelOldGC").
  • Έχει παρασχεθεί πειραματική υποστήριξη για τον συλλέκτη σκουπιδιών ZGC (Z Garbage Collector) σε πλατφόρμες macOS και Windows (προηγουμένως υποστηριζόταν μόνο σε Linux). Το ZGC λειτουργεί σε παθητική λειτουργία, ελαχιστοποιεί όσο το δυνατόν περισσότερο την καθυστέρηση λόγω συλλογής σκουπιδιών (ο χρόνος αδράνειας όταν χρησιμοποιείτε το ZGC δεν υπερβαίνει τα 10 ms.) και μπορεί να λειτουργήσει τόσο με μικρούς όσο και με τεράστιους σωρούς, μεγέθους από αρκετές εκατοντάδες megabyte έως πολλά terabyte.
  • Καταργήθηκε Εργαλειοθήκη και API για τη συμπίεση αρχείων JAR χρησιμοποιώντας τον αλγόριθμο Pack200.

Πηγή: opennet.ru

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