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

Η Java 9 είναι εδώ: Όλα όσα πρέπει να γνωρίζετε

Η Java 9 — επίσημα, η έκδοση 9 της Πλατφόρμας Standard Edition— είναι επιτέλους εδώ και το Java Development Kit (JDK) είναι διαθέσιμο για λήψη από προγραμματιστές.

Έχει πολλά σημαντικά αν αμφισβητούμενα νέα χαρακτηριστικά, αλλά είναι επίσης η τελευταία γραμμή για το παλιό στυλ παράδοσης Java.

Πού να κατεβάσετε το Java 9 JDK

Η Oracle δημοσίευσε το Java SE 9 JDK και τεκμηρίωση για λήψη από προγραμματιστές.

Τα βασικά νέα χαρακτηριστικά στο Java 9

Ντεμπούτο σχεδόν τρία χρόνια μετά το Java SE 8, το Java SE 9 έχει πολλές βασικές αρχιτεκτονικές αλλαγές, καθώς και πολλές βελτιώσεις.

Η αρθρωτότητα του Java 9 είναι ένα παιχνίδι αλλαγής

Οι νέες, αμφιλεγόμενες δυνατότητες αρθρωτότητας, που βασίζονται στο Project Jigsaw, είναι βέβαιο ότι θα προκαλέσουν το ενδιαφέρον των προηγμένων καταστημάτων Java που θέλουν να δουν τι έχει να προσφέρει το JDK 9 τώρα, ακόμη και αν τα πιο συντηρητικά καταστήματα αποφασίσουν να περιμένουν να ωριμάσουν η αρθρωτότητα.

Modularity - με τη μορφή του Java Platform Module System - διαιρεί το JDK σε ένα σύνολο ενοτήτων για συνδυασμό στο χρόνο εκτέλεσης, μεταγλώττισης ή κατασκευής. Η αρθρωτότητα ονομάστηκε «μεταβατική» αλλαγή, επιτρέποντας την κατανόηση των εξαρτήσεων μεταξύ των ενοτήτων.

Η αρθρωτότητα του Java 9 υποτίθεται ότι επιτρέπει στους προγραμματιστές να συναρμολογούν και να διατηρούν πιο εύκολα εξελιγμένες εφαρμογές. Επίσης, θα πρέπει να καταστήσει την Java καλύτερη ικανή να μειώσει σε μικρότερες συσκευές, ενώ η ασφάλεια και η απόδοση βελτιώνονται.

Οι πτυχές modularity του Java 9 περιλαμβάνουν τη συσκευασία εφαρμογών, τη διαμόρφωση του ίδιου του JDK και την αναδιοργάνωση του πηγαίου κώδικα σε ενότητες. Το σύστημα κατασκευής βελτιώνεται για την κατάρτιση ενοτήτων και την επιβολή ορίων μονάδας κατά το χρόνο κατασκευής. Οι εικόνες JDK και Java Runtime Environment (JRE) αναδιαρθρώνονται για να χειρίζονται λειτουργικές μονάδες. Επίσης, τα JavaFX UI στοιχεία ελέγχου και CSS API είναι πλέον προσβάσιμα για modularity.

Υποστηρίζεται πλήθος διαμορφώσεων. Ως αποτέλεσμα, η επεκτασιμότητα, η ασφάλεια και η απόδοση της εφαρμογής θα πρέπει να βελτιωθούν. Η ευκολότερη κλιμάκωση της Java σε μικρές συσκευές αποτελεί βασικό μοχλό της αρθρωτής προσπάθειας.

Με modularity, οι προγραμματιστές θα είναι καλύτερα σε θέση να κατασκευάζουν και να συντηρούν βιβλιοθήκες και μεγάλες εφαρμογές τόσο για το Java SE (Standard Edition) όσο και για το Java EE (Enterprise Edition). Αλλά κατά την ανάπτυξη της Java 9, η Oracle, η IBM, η Red Hat και άλλοι είχαν μεγάλες διαφωνίες σχετικά με το πώς να κάνουν μια τόσο ριζική αλλαγή στην πλατφόρμα. Το ίδιο το λειτουργικό σύστημα απορρίφθηκε τον Μάιο, μόνο για έγκριση σε δεύτερη ψηφοφορία τον Ιούνιο, μετά την πρόοδο.

Ακόμη και με τη συμφωνία μεταξύ των μεγάλων προμηθευτών Java, παραμένει διαμάχη σχετικά με το εάν η αρθρωτότητα θα κάνει τους προγραμματιστές Java πολύ καλή, με ορισμένους ειδικούς ναι ναι και άλλοι να λένε όχι. Ανεξάρτητα, το Java 9 έχει πλέον διαμορφωθεί.

Για να διευκολυνθεί η μετεγκατάσταση σε διαμορφωμένο Java 9, το Java 9 επιτρέπει την παράνομη ανακλαστική πρόσβαση για κώδικα στη διαδρομή κλάσης, που χρησιμοποιείται από το JRE για την αναζήτηση τάξεων και αρχείων πόρων. Αυτή η δυνατότητα δεν θα επιτρέπεται μετά την Java 9.

Βελτιώσεις μεταγλωττιστή για κώδικα Java 9

Η αναβάθμιση Java 9 διαθέτει αρκετές νέες δυνατότητες σύνταξης κώδικα, μεταξύ των οποίων είναι η σύνταξη εκ των προτέρων (AoT). Ακόμα σε μια πειραματική φάση, αυτή η δυνατότητα επιτρέπει τη συλλογή τάξεων Java σε εγγενή κώδικα πριν ξεκινήσει στην εικονική μηχανή. Αυτή η δυνατότητα προορίζεται να βελτιώσει το χρόνο εκκίνησης τόσο μικρών όσο και μεγάλων εφαρμογών, με περιορισμένο αντίκτυπο στην κορυφαία απόδοση.

Οι μεταγλωττιστές Just-in-Time (JIT) είναι γρήγοροι, αλλά τα προγράμματα Java έχουν γίνει τόσο μεγάλα που χρειάζεται πολύς χρόνος για να ζεσταθεί πλήρως το JIT, αφήνοντας κάποιες μεθόδους Java χωρίς επεξεργασία και εξασθένιση της απόδοσης. Η συλλογή πριν από το χρόνο προορίζεται για την αντιμετώπιση αυτών των ζητημάτων.

Ωστόσο, ο Ντμίτρι Λέσκοφ, διευθυντής μάρκετινγκ του προμηθευτή τεχνολογίας Java, Excelsior, ανησυχεί ότι η τεχνολογία σύνταξης του χρόνου δεν είναι αρκετά ώριμη και εύχεται η Oracle να περίμενε μέχρι την Java 10 για μια πιο σταθερή έκδοση.

Το Java 9 προσφέρει επίσης τη δεύτερη φάση της έξυπνης ανάπτυξης συλλογής της Oracle. Αυτό το χαρακτηριστικό περιλαμβάνει τη βελτίωση τουs javac σταθερότητα και φορητότητα του εργαλείου, ώστε να μπορεί να χρησιμοποιηθεί από προεπιλογή στο JVM (Java Virtual Machine). Το εργαλείο θα είναι επίσης γενικευμένο, ώστε να μπορεί να χρησιμοποιηθεί για μεγάλα έργα εκτός του JDK. Το JDK 9 έχει επίσης ενημερώσει τοjavac μεταγλωττιστή ώστε να μπορεί να μεταγλωττίσει προγράμματα Java 9 για εκτέλεση σε παλαιότερες εκδόσεις του Java.

Μια άλλη νέα - αλλά πειραματική - δυνατότητα σύνταξης είναι η JVM Compiler Interface (JVMCI) σε επίπεδο Java. Αυτή η διεπαφή επιτρέπει σε έναν μεταγλωττιστή γραμμένο σε Java να χρησιμοποιείται ως δυναμικός μεταγλωττιστής από το JVM. Το API του JVMCI παρέχει μηχανισμούς πρόσβασης σε δομές VM, εγκατάσταση μεταγλωττισμένου κώδικα και σύνδεση στο σύστημα μεταγλώττισης JVM.

Η σύνταξη ενός μεταγλωττιστή JVM στην Java θα πρέπει να επιτρέπει έναν μεταγλωττιστή υψηλής ποιότητας που είναι ευκολότερο να διατηρηθεί και να βελτιωθεί από τους υπάρχοντες μεταγλωττιστές γραμμένους σε C ή C ++. Ως αποτέλεσμα, οι μεταγλωττιστές που γράφονται στην ίδια την Java θα πρέπει να είναι ευκολότεροι να διατηρηθούν και να βελτιωθούν. Άλλες, υπάρχουσες προσπάθειες για την ενεργοποίηση μεταγλωττιστών σε Java περιλαμβάνουν το Graal Project και το Project Metropolis.

Μια νέα ικανότητα ελέγχου μεταγλωττιστή έχει ως στόχο να παρέχει λεπτομερή και εξαρτώμενο από τη μέθοδο έλεγχο των μεταγλωττιστών JVM, επιτρέποντας στους προγραμματιστές να αλλάξουν τις επιλογές ελέγχου μεταγλωττιστή στο χρόνο εκτέλεσης χωρίς υποβάθμιση της απόδοσης. Το εργαλείο επιτρέπει επίσης λύσεις για σφάλματα μεταγλωττιστή JVM.

Το REPL έρχεται τελικά στο Java 9

Το Java 9 διαθέτει ένα εργαλείο ανάγνωσης-εκτύπωσης βρόχου εκτύπωσης (REPL) - έναν άλλο μακροπρόθεσμο στόχο για την Java που γίνεται πραγματικότητα σε αυτήν την έκδοση, μετά από χρόνια ανάπτυξης στο Project Kulia.

Με την ονομασία jShell, το REP 9 της Java 9 αξιολογεί αλληλεπιδραστικά δηλώσεις και εκφράσεις. Οι προγραμματιστές μπορούν να λάβουν σχόλια για προγράμματα πριν από τη σύνταξη, εισάγοντας μερικές γραμμές κώδικα.

Οι δυνατότητες του εργαλείου γραμμής εντολών περιλαμβάνουν την ολοκλήρωση καρτελών και την αυτόματη προσθήκη των απαραίτητων τελικών ερωτηματικών. Το jShell API επιτρέπει τη λειτουργικότητα jShell σε IDE και άλλα εργαλεία, αν και το ίδιο το εργαλείο δεν είναι IDE.

Η έλλειψη REPL έχει αναφερθεί ως λόγος για τα σχολεία να απομακρυνθούν από την Java. (Γλώσσες όπως η Python και η Scala έχουν από καιρό REPL.) Αλλά ο ιδρυτής της γλώσσας Scala Martin Odersky αμφισβητεί τη χρησιμότητα ενός REPL στην Java, λέγοντας ότι η Java είναι προσανατολισμένη στη δήλωση, ενώ οι REPL είναι προσανατολισμένες στην έκφραση.

Βελτιώσεις στο API ροών σε Java 9

Οι ροές στην Java επιτρέπουν στους προγραμματιστές να εκφράζουν υπολογισμούς έτσι ώστε ο παραλληλισμός δεδομένων να μπορεί να αξιοποιηθεί αποτελεσματικά. Η δυνατότητα ροής στο Java 8 είναι για την επεξεργασία δεδομένων δηλωτικά, ενώ παράλληλα αξιοποιεί αρχιτεκτονικές πολλαπλών πυρήνων.

Στην Java 9, το API ροών προσθέτει μεθόδους για την υπό όρους λήψη και απόθεση στοιχείων από τη ροή, την επανάληψη μέσω στοιχείων ροής και τη δημιουργία ροής από μηδενική τιμή, ενώ επεκτείνει το σύνολο των Java SE API που μπορούν να χρησιμεύσουν ως πηγές ροών.

Η προσωρινή μνήμη κώδικα μπορεί να διαιρεθεί στην Java 9

Το JDK 9 επιτρέπει τον διαχωρισμό της προσωρινής μνήμης κώδικα σε τμήματα για τη βελτίωση της απόδοσης και την επέκταση, όπως το λεπτό κλείδωμα. Τα αποτελέσματα θα πρέπει να βελτιωθούν οι χρόνοι σάρωσης λόγω εξειδικευμένων επαναληπτών που παραλείπουν τον κωδικό χωρίς μέθοδο. διαχωρισμός κώδικα χωρίς μέθοδο, προφίλ και μη προφίλ · και βελτίωση του χρόνου εκτέλεσης για ορισμένα σημεία αναφοράς.

Καλύτερη υποστήριξη JavaScript στο Java 9 μέσω του Project Nashorn

Το Project Nashorn, το οποίο παρέχει έναν ελαφρύ χρόνο εκτέλεσης JavaScript για Java, βελτιώνεται στο JDK 9. Το Project Nashorn ήταν μια προσπάθεια υλοποίησης υψηλής απόδοσης, αλλά ελαφρού χρόνου εκτέλεσης JavaScript στην Java, μετά το έργο Rhino που ξεκίνησε στο Netscape. Το Project Nashorn χρεώθηκε με την ενεργοποίηση της ενσωμάτωσης JavaScript σε εφαρμογές Java. Παρείχε στη Java μια μηχανή JavaScript στο JDK 8.

Το JDK 9 περιλαμβάνει ένα API ανάλυσης για το δέντρο σύνταξης ECMAScript του Nashorn. Το API επιτρέπει την ανάλυση κώδικα ECMAScript από IDE και πλαίσια διακομιστή χωρίς να εξαρτάται από τις εσωτερικές τάξεις υλοποίησης του Project Nashorn.

Το API πελάτη HTTP / 2 έρχεται στο Java 9

Το API πελάτη beta HTTP / 2 έχει έρθει στο JDK 9, εφαρμόζοντας στην Java την αναβάθμιση στο βασικό πρωτόκολλο HTTP του ιστού. Το WebSocket υποστηρίζεται και από το API.

Το HTTP / 2 API μπορεί να αντικαταστήσει το HttpURLConnection API, το οποίο είχε προβλήματα, συμπεριλαμβανομένου του σχεδιασμού με πρωτόκολλα που δεν λειτουργούν τώρα, πριν από το HTTP / 1, είναι πολύ αφηρημένο και είναι δύσκολο στη χρήση.

Βελτιωμένη υποστήριξη HTML5 και Unicode στην Java 9

Στο JDK 9, το εργαλείο τεκμηρίωσης Javadoc ενισχύεται για τη δημιουργία σήμανσης HTML5. Το πρότυπο κωδικοποίησης Unicode 8.0 - το οποίο προσθέτει 8.000 χαρακτήρες, 10 μπλοκ και έξι σενάρια - υποστηρίζεται επίσης.

Το API ασφαλείας DTLS προστίθεται στο Java 9

Για ασφάλεια, το Java 9 προσθέτει ένα API για DTLS (Datagram Transport Layer Security). Το πρωτόκολλο έχει σχεδιαστεί για να αποτρέπει την υποκλοπή, την παραβίαση και την πλαστογράφηση μηνυμάτων στις επικοινωνίες πελάτη / διακομιστή. Παρέχεται μια εφαρμογή για λειτουργίες πελάτη και διακομιστή.

Τι καταργεί και αφαιρεί το Java 9

Το Java 9 καταργεί ή καταργεί πολλές λειτουργίες που δεν είναι πλέον σε λειτουργία. Το κύριο μεταξύ αυτών είναι το API Applet, το οποίο έχει καταργηθεί. Έχει ξεπεράσει το στυλ που οι κατασκευαστές προγράμματος περιήγησης που έχουν επίγνωση της ασφάλειας καταργούν την υποστήριξη για προσθήκες προγράμματος περιήγησης Java. Η έλευση του HTML5 βοήθησε επίσης να εξαφανιστεί. Οι προγραμματιστές καθοδηγούνται τώρα σε εναλλακτικές λύσεις όπως το Java Web Start, για την εκκίνηση εφαρμογών από πρόγραμμα περιήγησης ή για εφαρμογές με δυνατότητα εγκατάστασης.

Το εργαλείο appletviewer καταργείται επίσης.

Το Java 9 καταργεί επίσης τον συλλέκτη σκουπιδιών ταυτόχρονης σήμανσης (CMS), με υποστήριξη να σταματήσει σε μελλοντική κυκλοφορία. Ο σκοπός είναι να επιταχυνθεί η ανάπτυξη άλλων συλλεκτών απορριμμάτων στην εικονική μηχανή HotSpot. Ο συλλέκτης σκουπιδιών G1 χαμηλής παύσης προορίζεται να αποτελέσει μακροχρόνια αντικατάσταση του CMS.

Εν τω μεταξύ, οι συνδυασμοί συλλογής απορριμμάτων που είχαν καταργηθεί προηγουμένως στο JDK 8 καταργούνται στο JDK 9. Αυτοί περιλαμβάνουν συνδυασμούς που χρησιμοποιούνται σπάνια, όπως Incremental CMS, ParNew + SerialOld και DefNew + CMS, οι οποίοι πρόσθεσαν επιπλέον πολυπλοκότητα στη βάση κώδικα συλλογής απορριμμάτων.

Το Java 9 παρέχει επίσης προειδοποιήσεις Java στις δηλώσεις εισαγωγής, για να βοηθήσει να καθαρίσει τις μεγάλες βάσεις κώδικα από προειδοποιήσεις χνούδι. Με αυτές τις βάσεις κώδικα, η καταργημένη λειτουργικότητα πρέπει συχνά να υποστηρίζεται για κάποιο χρονικό διάστημα, αλλά η εισαγωγή μιας καταργημένης δομής δεν εγγυάται ένα προειδοποιητικό μήνυμα εάν οι χρήσεις της δομής είναι σκόπιμες και καταργούνται.

Επίσης αφαιρεθεί στην Java 9 είναι η δυνατότητα επιλογής του JRE κατά το χρόνο εκκίνησης μέσω της δυνατότητας Multiple JRE (mJRE). Η δυνατότητα σπάνια χρησιμοποιήθηκε, περιπλέκοντας την εφαρμογή του εκτοξευτή Java και δεν τεκμηριώθηκε ποτέ πλήρως όταν έκανε το ντεμπούτο του στο JDK 5.

Η Oracle έχει αφαιρέσει τον πράκτορα JVM TI (Tool Interface) hprof (Heap Profiling), ο οποίος έχει αντικατασταθεί στο JVM. Το εργαλείο jhat αφαιρέθηκε επίσης, αφού είχε καταστεί παρωχημένο από ανώτερους σωρούς οπτικοποιητές και αναλυτές.

Το Java 9 είναι το τέλος της γραμμής του καθώς ξεκινά η νέα γραμμή Java 9

Θα μπορούσατε να πείτε ότι το Java 9 βγαίνει με ένα χτύπημα, με όλες τις νέες δυνατότητες. Η Oracle αποκάλυψε πρόσφατα ότι το Java 9 είναι το τελευταίο του είδους του, όσον αφορά τον προσδιορισμό του και ο χρόνος που πέρασε μεταξύ των μεγάλων κυκλοφοριών.

Από εδώ και πέρα, η Java έχει προγραμματιστεί να έχει ένα εξάμηνο ρυθμό κυκλοφορίας, με την επόμενη μεγάλη έκδοση, να ονομάζεται Java 18.3, το Μάρτιο του 2018, ακολουθούμενο από το Java 18.9 έξι μήνες αργότερα.

Ο νέος ρυθμός κυκλοφορίας της Java σημαίνει επίσης ότι το JDK 9 δεν θα οριστεί ως μακροπρόθεσμη έκδοση υποστήριξης. Αντ 'αυτού, η επόμενη μακροπρόθεσμη κυκλοφορία θα είναι η Java 18.9.

Ο ρυθμός ταχύτερης κυκλοφορίας της Java σημαίνει ότι οι προγραμματιστές δεν θα πρέπει να περιμένουν για μεγάλες εκδόσεις. Μπορεί επίσης να σημαίνει ότι οι προγραμματιστές θα παραλείψουν την Java 9 και τις «ανώριμες» δυνατότητες αρθρωτότητάς της και θα περιμένουν έξι μήνες για τη νέα έκδοση, η οποία πιθανότατα θα εξαλείψει οποιαδήποτε στρίβει, είπε ο Simon Maple, διευθυντής της υποστήριξης Java στον προμηθευτή εργαλείων Java ZeroTurnaround.