Τι είναι η JVM; Εξηγήστε την JVM Archiδομή
⚡ Έξυπνη Σύνοψη
Java Η Εικονική Μηχανή (JVM) είναι η μηχανή που παρέχει ένα περιβάλλον εκτέλεσης για την οδήγηση Java κώδικα, μετατρέποντας bytecode ανεξάρτητο από πλατφόρμα σε εγγενή γλώσσα μηχανής. Αποτελεί μέρος του Java Περιβάλλον χρόνου εκτέλεσης και επιτρέπει Javaφορητότητα που επιτρέπει την εγγραφή μία φορά και την εκτέλεση οπουδήποτε.

Σε τι είναι το JVM Java?
Java Εικονική μηχανή (JVM) είναι ένας κινητήρας που παρέχει ένα περιβάλλον χρόνου εκτέλεσης για την οδήγηση του Java κώδικα ή εφαρμογές. Μετατρέπει Java bytecode στη γλώσσα μηχανής. Το JVM είναι μέρος του Java Περιβάλλον Εκτέλεσης (JRE). Σε άλλες γλώσσες προγραμματισμού, ο μεταγλωττιστής παράγει κώδικα μηχανής για ένα συγκεκριμένο σύστημα. Ωστόσο, το Java Ο μεταγλωττιστής παράγει κώδικα για μια Εικονική Μηχανή γνωστή ως Java Εικονική μηχανή.
Πώς λειτουργεί το JVM;
Πρώτον, Java ο κώδικας μεταγλωττίζεται σε bytecode. Αυτός ο bytecode ερμηνεύεται σε διαφορετικά μηχανήματα. Μεταξύ του συστήματος υποδοχής και του Java πηγή, το bytecode είναι μια ενδιάμεση γλώσσα. Η JVM σε Java είναι υπεύθυνος για την κατανομή χώρου στη μνήμη.
Εργασία του Java Εικονική μηχανή (JVM)
Archiδομή του JVM (Java εικονική μηχανή)
Τώρα, ας κατανοήσουμε την αρχιτεκτονική της JVM. Η αρχιτεκτονική της JVM Java Περιέχει έναν φορτωτή κλάσεων, μια περιοχή μνήμης, μια μηχανή εκτέλεσης και πολλά άλλα.
Java Εικονική μηχανή Archiδομή
1) ClassLoader
Ο φορτωτής κλάσεων είναι ένα υποσύστημα που χρησιμοποιείται για τη φόρτωση αρχείων κλάσεων. Εκτελεί τρεις κύριες λειτουργίες, συγκεκριμένα τη φόρτωση, τη σύνδεση και την αρχικοποίηση.
2) Περιοχή μεθόδου
Η περιοχή μεθόδων JVM αποθηκεύει δομές κλάσεων όπως μεταδεδομένα, την ομάδα σταθερών χρόνου εκτέλεσης και τον κώδικα για τις μεθόδους.
3) Σωρός
Όλες οι Αντικείμενα, οι σχετικές μεταβλητές στιγμιότυπου και οι πίνακες αποθηκεύονται στο σωρό. Αυτή η μνήμη είναι κοινή και μοιράζεται σε πολλά νήματα.
4) Στοίβες Γλωσσών JVM
Java Οι στοίβες γλωσσών αποθηκεύουν τοπικές μεταβλητές και τα μερικά αποτελέσματά τους. Κάθε νήμα έχει τη δική του στοίβα JVM, η οποία δημιουργείται ταυτόχρονα με τη δημιουργία του νήματος. Ένα νέο πλαίσιο δημιουργείται κάθε φορά που καλείται μια μέθοδος και διαγράφεται όταν ολοκληρωθεί η διαδικασία κλήσης της μεθόδου.
5) Μητρώα Η/Υ
Ο καταχωρητής PC αποθηκεύει τη διεύθυνση του Java εντολή εικονικής μηχανής που εκτελείται αυτήν τη στιγμή. Στο Java, κάθε νήμα έχει τον δικό του ξεχωριστό καταχωρητή PC.
6) Στοίβες Native Method
Οι στοίβες εγγενών μεθόδων περιέχουν τις οδηγίες του εγγενούς κώδικα που εξαρτώνται από την εγγενή βιβλιοθήκη. Είναι γραμμένος σε άλλη γλώσσα αντί για Java.
7) Μηχανή εκτέλεσης
Η μηχανή εκτέλεσης διαβάζει τον bytecode και τον εκτελεί κομμάτι-κομμάτι. Χρησιμοποιεί έναν διερμηνέα και έναν μεταγλωττιστή Just-In-Time (JIT) για να μετατρέψει τον bytecode σε εγγενή κώδικα μηχανής και να τον εκτελέσει.
8) Εγγενής διεπαφή μεθόδου
Το Native Method Interface είναι ένα πλαίσιο προγραμματισμού. Επιτρέπει Java κώδικας που εκτελείται σε μια JVM για να καλεί και να καλείται από εγγενείς εφαρμογές και βιβλιοθήκες.
9) Βιβλιοθήκες Native Method
Οι Εγγενείς Βιβλιοθήκες είναι μια συλλογή από εγγενείς βιβλιοθήκες (C, C++) που χρειάζονται η Μηχανή Εκτέλεσης.
Λογισμικό Code Διαδικασία μεταγλώττισης και εκτέλεσης
Για να γράψετε και να εκτελέσετε ένα πρόγραμμα λογισμικού, χρειάζεστε τα εξής:
- 1) Συντάκτης – Για να πληκτρολογήσετε το πρόγραμμά σας, θα μπορούσε να χρησιμοποιηθεί ένα σημειωματάριο.
- 2) Μεταγλωττιστής – Για να μετατρέψετε το πρόγραμμα γλώσσας υψηλού επιπέδου σε εγγενή κώδικα μηχανής.
- 3) Συνδετικός – Για να συνδυάσετε τις διαφορετικές αναφορές αρχείων προγράμματος στο κύριο πρόγραμμά σας.
- 4) Φορτωτής – Για να φορτώσετε τα αρχεία από τη δευτερεύουσα συσκευή αποθήκευσης, όπως έναν σκληρό δίσκο, μια μονάδα flash ή ένα CD, στη μνήμη RAM για εκτέλεση. Η φόρτωση γίνεται αυτόματα όταν εκτελείτε τον κώδικά σας.
- 5) Εκτέλεση – Πραγματική εκτέλεση του κώδικα, την οποία διαχειρίζεται το λειτουργικό σύστημα και ο επεξεργαστής σας.
Με αυτό το υπόβαθρο, ανατρέξτε στο παρακάτω βίντεο και μάθετε την εσωτερική λειτουργία και την αρχιτεκτονική της JVM (Java εικονική μηχανή).
Πατήστε εδώ εάν το βίντεο δεν είναι προσβάσιμο
Διαδικασία μεταγλώττισης και εκτέλεσης κώδικα C
Για να καταλάβετε το Java διαδικασία μεταγλώττισης, ας ρίξουμε πρώτα μια γρήγορη ματιά στη διαδικασία μεταγλώττισης και σύνδεσης σε C.
Ας υποθέσουμε ότι στη συνάρτηση main έχετε καλέσει δύο συναρτήσεις, την f1 και την f2. Η συνάρτηση main είναι αποθηκευμένη στο αρχείο a1.c.
Η συνάρτηση f1 αποθηκεύεται σε ένα αρχείο a2.c.
Η συνάρτηση f2 αποθηκεύεται σε ένα αρχείο a3.c.
Όλα αυτά τα αρχεία, δηλαδή τα a1.c, a2.c και a3.c, τροφοδοτούνται στον μεταγλωττιστή, του οποίου η έξοδος είναι τα αντίστοιχα αρχεία αντικειμένων, τα οποία είναι ο κώδικας μηχανής.
Το επόμενο βήμα είναι η ενσωμάτωση όλων αυτών των αρχείων αντικειμένων σε ένα μόνο αρχείο .exe με τη βοήθεια ενός συνδέσμου. Ο σύνδεσμος θα ενώσει όλα αυτά τα αρχεία μαζί και θα δημιουργήσει το αρχείο .exe.
Κατά την εκτέλεση του προγράμματος, ένα πρόγραμμα φόρτωσης θα φορτώσει το αρχείο a.exe στο RAM για εκτέλεση.
Java Σύνταξη και εκτέλεση κώδικα σε Java VM
Τώρα, ας δούμε τη διαδικασία για JavaΣτην κύρια εκδοχή σας, έχετε δύο μεθόδους, f1 και f2.
- Η μέθοδος main αποθηκεύεται στο αρχείο a1.java
- Το f1 αποθηκεύεται σε ένα αρχείο ως a2.java
- Το f2 αποθηκεύεται σε ένα αρχείο ως a3.java
Ο μεταγλωττιστής θα μεταγλωττίσει τα τρία αρχεία και θα δημιουργήσει τρία αντίστοιχα αρχεία .class, τα οποία αποτελούνται από κώδικα BYTE. Σε αντίθεση με την C, δεν γίνεται σύνδεση.
The Java VM, χρυσός Java Η εικονική μηχανή βρίσκεται στη μνήμη RAM. Κατά την εκτέλεση, χρησιμοποιώντας το πρόγραμμα φόρτωσης κλάσεων, τα αρχεία κλάσεων μεταφέρονται στη μνήμη RAM. Ο κώδικας BYTE επαληθεύεται για τυχόν παραβιάσεις ασφαλείας.
Στη συνέχεια, η μηχανή εκτέλεσης θα μετατρέψει τον bytecode σε εγγενή κώδικα μηχανής. Αυτή είναι η μεταγλώττιση just-in-time. Είναι ένας από τους κύριους λόγους για τους οποίους Java είναι σχετικά αργός.
ΣΗΜΕΊΩΣΗ: Το JIT, ή ο μεταγλωττιστής Just-in-time, είναι το μέρος του Java Εικονική Μηχανή (JVM). Ερμηνεύει τμήματα του κώδικα byte που έχουν παρόμοια λειτουργικότητα ταυτόχρονα.
Γιατί είναι Java Τόσο ερμηνευμένη όσο και μεταγλωττισμένη γλώσσα;
Γλώσσες προγραμματισμού ταξινομούνται ως:
- Γλώσσα Ανώτερου Επιπέδου, π.χ. C++, Java
- Γλώσσες μεσαίου επιπέδου, π.χ. C
- Γλώσσα χαμηλού επιπέδου, π.χ. Assembly
- Τέλος, το χαμηλότερο επίπεδο ως Μηχανική Γλώσσα
A μεταγλωττιστής είναι ένα πρόγραμμα που μετατρέπει ένα πρόγραμμα από ένα επίπεδο γλώσσας σε ένα άλλο. Για παράδειγμα, η μετατροπή ενός C++ πρόγραμμα σε κώδικα μηχανής. Το Java ο μεταγλωττιστής μετατρέπει αρχεία υψηλού επιπέδου Java κώδικα σε bytecode (ο οποίος είναι επίσης ένας τύπος κώδικα μηχανής).
An διερμηνέας είναι ένα πρόγραμμα που μετατρέπει ένα πρόγραμμα ενός επιπέδου σε μια άλλη γλώσσα προγραμματισμού στο ίδιο επίπεδοΓια παράδειγμα, η μετατροπή ενός Java πρόγραμμα σε C++.
In Java, η γεννήτρια κώδικα Just-In-Time μετατρέπει το bytecode στον εγγενή κώδικα μηχανής, οι οποίοι βρίσκονται στα ίδια επίπεδα προγραμματισμού. Ως εκ τούτου, Java είναι τόσο μια μεταγλωττισμένη όσο και μια ερμηνευμένη γλώσσα.
Γιατί είναι Java αργός?
Οι δύο κύριοι λόγοι πίσω από τη βραδύτητα του Java είναι:
- Δυναμική σύνδεση: Σε αντίθεση με το C, η σύνδεση γίνεται κατά το χρόνο εκτέλεσης, κάθε φορά που εκτελείται το πρόγραμμα Java.
- Διερμηνέας χρόνου εκτέλεσης: Η μετατροπή του κώδικα byte σε εγγενή κώδικα μηχανής γίνεται κατά το χρόνο εκτέλεσης Java, κάτι που μειώνει περαιτέρω την ταχύτητα.
Ωστόσο, οι τελευταίες εκδόσεις του Java έχουν αντιμετωπίσει σε μεγάλο βαθμό αυτά τα σημεία συμφόρησης στην απόδοση.











