Το Java Virtual Machine (JVM) είναι ένα πραγματικό dropper όνομα όταν προγραμματίζετε σε Java. Σε αντίθεση με ό, τι υποδηλώνει το όνομα, η Java Virtual Machine μπορεί να συναντηθεί και σε σχέση με άλλες γλώσσες προγραμματισμού.
Σε γενικές γραμμές, δεν είναι απαραίτητο να γνωρίζουμε ποια είναι η Java Virtual Machine, ή ακόμα και αυτό που κάνει, για να είναι σε θέση να προγραμματίζει σε Java. Από την άλλη πλευρά, εξοικειώνοντας τον εαυτό σας με την εσωτερική λειτουργία μιας μηχανής, συμβάλλει στην αύξηση της κατανόησης και της συνολικής γνώσης.
Αυτό το άρθρο βουίζει πάνω από την ιδέα της Java Virtual Machine, τι κάνει για εσάς και μερικά από τα πιο σημαντικά πλεονεκτήματα και μειονεκτήματα. Παρόλο που έχω προσπαθήσει να το κρατήσω απλό και υπάρχει σίγουρα πιο προηγμένη βιβλιογραφία για το θέμα, αναμένεται μια στοιχειώδης κατανόηση της Java και προγραμματισμού.
Γλώσσες υψηλού επιπέδου
Η σημασιολογία μιας γλώσσας προγραμματισμού σχεδιάζεται να είναι κοντά στη φυσική μας γλώσσα, ενώ παραμένει σύντομη και εύκολη στην ερμηνεία για μια μηχανή. Όπως ίσως γνωρίζετε, η γλώσσα προγραμματισμού είναι εντελώς διαφορετική από τον κώδικα μηχανής, το σύνολο των οδηγιών που χρησιμοποιεί ένας υπολογιστής για να κατασκευάσει και να εκτελέσει ένα πρόγραμμα. Αυτό ονομάζουμε γλώσσες υψηλού επιπέδου . ένα ή πολλαπλά επίπεδα αφαίρεσης από τον κωδικό της μηχανής.
Πριν μπορέσει να τρέξει, πρέπει πρώτα να ερμηνευτεί ο κώδικας υψηλού επιπέδου. Πολλές διεπαφές προγραμματισμού καταρτίζουν εκ των προτέρων ( compilation AOT ) για μια συγκεκριμένη πλατφόρμα. Αυτό καθιστά το πρόγραμμα πιο αποτελεσματικό στο χρόνο εκτέλεσης, αλλά πολύ λιγότερο συμβατό με διαφορετικές πλατφόρμες. Η Java, αντίθετα, λειτουργεί με μια ενδιάμεση γλώσσα που ονομάζεται Java bytecode και την Java Virtual Machine .
JVM & Bytecode Java
Όταν το έργο Java σας δημιουργεί, μεταφράζει τον πηγαίο κώδικα (που περιέχεται στα αρχεία προέλευσης * .java ) σε Java bytecode (που συνήθως περιέχεται σε αρχεία * .class). Αυτό παίρνει τον κωδικό υψηλού επιπέδου σας ένα βήμα πιο κοντά στον κώδικα του μηχανήματος, αλλά όχι ακόμα εκεί. Αυτός ο bytecode είναι μια συλλογή από συμπαγείς οδηγίες. πιο εύκολο για μια μηχανή να ερμηνεύσει, αλλά λιγότερο ευανάγνωστο.
Όταν εκτελείτε μια εφαρμογή Java στον υπολογιστή σας, στο κινητό σας ή σε οποιαδήποτε άλλη πλατφόρμα με δυνατότητα Java, μεταβιβάζετε ουσιαστικά αυτό το Java bytecode στην εικονική μηχανή Java. Ο διερμηνέας στην εικονική μηχανή Java αρχίζει συνήθως να συνθέτει ολόκληρο τον bytecode κατά το χρόνο εκτέλεσης, ακολουθώντας τις αρχές της αποκαλούμενης just-in-time compilation . Αυτό συμβαίνει για την τυπική, αν και συχνά μικρή καθυστέρηση κατά το άνοιγμα μιας εφαρμογής Java, αλλά γενικά βελτιώνει την απόδοση του προγράμματος σε σύγκριση με την ερμηνευμένη σύνταξη .
Το κύριο πλεονέκτημα αυτού του συστήματος είναι η αυξημένη συμβατότητα. Δεδομένου ότι οι εφαρμογές σας τρέχουν σε μια εικονική μηχανή αντί απευθείας στο υλικό σας, ο προγραμματιστής μπορεί να προγραμματίσει και να χτίσει την εφαρμογή τους μια φορά, η οποία στη συνέχεια μπορεί να εκτελεστεί σε κάθε συσκευή με εφαρμογή της Java Virtual Machine. Αυτή η αρχή έχει γεννήσει το σύνθημα Java: " Γράψτε μια φορά, τρέξτε παντού ".
Pro: Συμβατότητα και αυξημένη ασφάλεια
Εκτός από τη συμβατότητα κώδικα, η εικονική μηχανή Java συνοδεύεται από άλλα οφέλη. Ένα από τα σημαντικότερα από αυτά είναι η σχετική ασφάλεια των προγραμμάτων Java ως αποτέλεσμα της Java Virtual Machine. Ασφάλεια, που σημαίνει ότι ένα πρόγραμμα που εκτελείται σε μια εικονική μηχανή είναι πολύ λιγότερο πιθανό να διαταράξει το λειτουργικό σύστημα του χρήστη ή να καταστρέψει τα αρχεία δεδομένων, αν προκύψουν σφάλματα.
Con: Διαφορετικές εφαρμογές και αποσφαλμάτωση JVM
Μια από τις κύριες επικρίσεις που εκφράστηκαν κατά της συμβατότητας κώδικα και της εικονικής μηχανής Java οφείλεται στις πολλές διαφορετικές εφαρμογές της τελευταίας. Βλέπετε, η εικονική μηχανή Java δεν είναι ένα κομμάτι του λογισμικού. Oracle, οι ιδιοκτήτες της Java, έχουν την εφαρμογή της εικονικής μηχανής Java, αλλά άλλοι μπορούν να κάνουν τις δικές τους εάν ικανοποιήσουν διάφορες πρακτικές και συμβατικές αξιώσεις.
Αυτές οι διαφορετικές εφαρμογές σημαίνουν ότι ο κώδικάς σας μπορεί να λειτουργεί ομαλά σε μία εικονική μηχανή Java, αλλά να συντριβεί και να καίει σε άλλο. Παρόλο που στην πράξη μπορείτε να γράψετε τον κώδικα σας μία φορά και να το εκτελέσετε παντού, ο πιο σύνθετος κώδικας πρέπει ακόμα να υποστεί σφάλμα σε διαφορετικές υλοποιήσεις Java Virtual Machine για να διασφαλιστεί η σωστή λειτουργία.
Έχετε κάποια εμπειρία εργασίας με την Java Virtual Machine; Αν ναι, υπάρχει κάτι που μου λείπει εδώ που πρέπει να αναφέρουμε;
Πιστωτική εικόνα: Michaelaw, Dcoetzee