Τι είναι το JVM;
Η Java Virtual Machine (JVM) είναι μια μηχανή που παρέχει περιβάλλον χρόνου εκτέλεσης για την οδήγηση του κώδικα Java ή εφαρμογών. Μετατρέπει το bytecode Java σε γλώσσα μηχανών. Το JVM είναι μέρος του Java Run Environment (JRE). Σε άλλες γλώσσες προγραμματισμού, ο μεταγλωττιστής παράγει κώδικα μηχανής για ένα συγκεκριμένο σύστημα. Ωστόσο, ο μεταγλωττιστής Java παράγει κώδικα για μια εικονική μηχανή γνωστή ως Java Virtual Machine.
Να πώς λειτουργεί το JVM
Πρώτα, ο κώδικας Java συμμορφώνεται σε bytecode. Αυτός ο κωδικός bytec ερμηνεύεται σε διαφορετικά μηχανήματα
Μεταξύ συστήματος κεντρικού υπολογιστή και πηγής Java, το Bytecode είναι μια ενδιάμεση γλώσσα.
Το JVM στην Java είναι υπεύθυνο για την εκχώρηση χώρου μνήμης.
Σε αυτό το σεμινάριο JVM, θα μάθετε-
- Αρχιτεκτονική JVM
- Διαδικασία σύνταξης και εκτέλεσης κώδικα λογισμικού
- Διαδικασία σύνταξης και εκτέλεσης κώδικα C
- Διαδικασία σύνταξης και εκτέλεσης κώδικα Java
- Γιατί η Java ερμηνεύεται και μεταγλωττίζεται γλώσσα;
- Γιατί η Java είναι αργή;
Αρχιτεκτονική JVM
Τώρα σε αυτό το σεμινάριο JVM, ας κατανοήσουμε την Αρχιτεκτονική του JVM. Η αρχιτεκτονική JVM στην Java περιέχει classloader, περιοχή μνήμης, μηχανή εκτέλεσης κ.λπ.1) ClassLoader
Το class loader είναι ένα υποσύστημα που χρησιμοποιείται για τη φόρτωση αρχείων κλάσης. Εκτελεί τρεις κύριες λειτουργίες, δηλαδή. Φόρτωση, σύνδεση και αρχικοποίηση.
2) Περιοχή μεθόδου
Η περιοχή μεθόδου JVM αποθηκεύει δομές κλάσης όπως μεταδεδομένα, το συνεχές σύνολο χρόνου εκτέλεσης και τον κώδικα για μεθόδους.
3) Σωρός
Όλα τα αντικείμενα, οι σχετικές μεταβλητές παρουσίας και οι πίνακες αποθηκεύονται στο σωρό. Αυτή η μνήμη είναι κοινή και κοινή σε πολλά νήματα.
4) Στοίβες γλώσσας JVM
Java Language Stacks αποθηκεύει τοπικές μεταβλητές και είναι μερικά αποτελέσματα. Κάθε νήμα έχει τη δική του στοίβα JVM, που δημιουργείται ταυτόχρονα με τη δημιουργία του νήματος. Ένα νέο πλαίσιο δημιουργείται κάθε φορά που καλείται μια μέθοδος και διαγράφεται όταν ολοκληρωθεί η διαδικασία επίκλησης μεθόδου.
5) Μητρώα Η / Υ
Το μητρώο υπολογιστή αποθηκεύει τη διεύθυνση της εντολής εικονικής μηχανής Java που εκτελείται αυτήν τη στιγμή. Στην Java, κάθε νήμα έχει το ξεχωριστό μητρώο υπολογιστή.
6) Στοίβες εγγενών μεθόδων
Οι στοίβες εγγενών μεθόδων κρατούν την εντολή του εγγενούς κώδικα εξαρτάται από την εγγενή βιβλιοθήκη. Είναι γραμμένο σε άλλη γλώσσα αντί για Java.
7) Μηχανή εκτέλεσης
Είναι ένας τύπος λογισμικού που χρησιμοποιείται για τη δοκιμή υλικού, λογισμικού ή πλήρων συστημάτων. Η μηχανή εκτέλεσης δοκιμής δεν μεταφέρει ποτέ πληροφορίες σχετικά με το δοκιμασμένο προϊόν.
8) Διεπαφή εγγενών μεθόδων
Το Native Method Interface είναι ένα πλαίσιο προγραμματισμού. Επιτρέπει στον κώδικα Java που εκτελείται σε JVM να καλεί από βιβλιοθήκες και εγγενείς εφαρμογές.
9) Βιβλιοθήκες εγγενών μεθόδων
Οι Εγγενείς βιβλιοθήκες είναι μια συλλογή των Εγγενών βιβλιοθηκών (C, C ++) που απαιτούνται από τη μηχανή εκτέλεσης.
Διαδικασία σύνταξης και εκτέλεσης κώδικα λογισμικού
Για να γράψετε και να εκτελέσετε ένα πρόγραμμα λογισμικού, χρειάζεστε τα ακόλουθα
1) Επεξεργαστής - Για να πληκτρολογήσετε το πρόγραμμά σας, θα μπορούσε να χρησιμοποιηθεί ένα σημειωματάριο για αυτό
2) Μεταγλωττιστής - Για να μετατρέψετε το πρόγραμμα υψηλής γλώσσας σε εγγενή κωδικό μηχανής
3) Linker - Για να συνδυάσετε την αναφορά διαφορετικών αρχείων προγράμματος στο κύριο πρόγραμμά σας.
4) Loader - Για να φορτώσετε τα αρχεία από τη δευτερεύουσα συσκευή αποθήκευσης, όπως Hard Disk, Flash Drive, CD σε RAM για εκτέλεση. Η φόρτωση γίνεται αυτόματα όταν εκτελείτε τον κωδικό σας.
5) Εκτέλεση - Πραγματική εκτέλεση του κώδικα που χειρίζεται το λειτουργικό σύστημα και ο επεξεργαστής σας.
Με αυτό το φόντο, ανατρέξτε στο παρακάτω βίντεο και μάθετε την εσωτερική λειτουργία και την αρχιτεκτονική του JVM του JVM (Java Virtual Machine).
Κάντε κλικ εδώ εάν το βίντεο δεν είναι προσβάσιμο
Διαδικασία σύνταξης και εκτέλεσης κώδικα C
Για να κατανοήσετε τη διαδικασία κατάρτισης Java στην Java. Ας ρίξουμε μια γρήγορη ματιά στη διαδικασία σύνταξης και σύνδεσης στο C.
Ας υποθέσουμε ότι στο κύριο, έχετε καλέσει δύο συναρτήσεις f1 και f2. Η κύρια λειτουργία αποθηκεύεται στο αρχείο a1.c.
Η συνάρτηση f1 αποθηκεύεται σε ένα αρχείο a2.c
Η συνάρτηση f2 αποθηκεύεται σε ένα αρχείο a3.c
Όλα αυτά τα αρχεία, δηλαδή, a1.c, a2.c και a3.c, τροφοδοτούνται στον μεταγλωττιστή. Η έξοδος των οποίων είναι τα αντίστοιχα αρχεία αντικειμένων που είναι ο κωδικός του μηχανήματος.
Το επόμενο βήμα είναι η ενσωμάτωση όλων αυτών των αρχείων αντικειμένων σε ένα αρχείο .exe με τη βοήθεια του συνδέσμου. Ο σύνδεσμος θα ενώσει όλα αυτά τα αρχεία μαζί και θα παράγει το αρχείο .exe.
Κατά την εκτέλεση του προγράμματος, ένα πρόγραμμα φόρτωσης θα φορτώσει a.exe στη μνήμη RAM για την εκτέλεση.
Σύνταξη και εκτέλεση κώδικα Java σε Java VM
Τώρα σε αυτό το σεμινάριο JVM, ας δούμε τη διαδικασία για το JAVA. Στην κύρια, έχετε δύο μεθόδους f1 και f2.
- Η κύρια μέθοδος αποθηκεύεται στο αρχείο a1.java
- Το f1 αποθηκεύεται σε ένα αρχείο ως a2.java
- Το f2 αποθηκεύεται σε ένα αρχείο ως a3.java
Ο μεταγλωττιστής θα μεταγλωττίσει τα τρία αρχεία και θα παράγει 3 αντίστοιχα αρχεία .class που αποτελείται από τον κωδικό BYTE. Σε αντίθεση με το C, δεν γίνεται σύνδεση .
Η εικονική μηχανή Java VM ή Java βρίσκεται στη μνήμη RAM. Κατά την εκτέλεση, χρησιμοποιώντας τον φορτωτή κλάσης τα αρχεία τάξης μεταφέρονται στη μνήμη RAM. Ο κωδικός BYTE επαληθεύεται για τυχόν παραβιάσεις ασφαλείας.
Στη συνέχεια, ο κινητήρας εκτέλεσης θα μετατρέψει τον κωδικό Bytec σε εγγενή κώδικα μηχανής. Αυτό είναι ακριβώς στο χρόνο κατάρτισης. Είναι ένας από τους κύριους λόγους για τους οποίους η Java είναι σχετικά αργή.
ΣΗΜΕΙΩΣΗ: Ο μεταγλωττιστής JIT ή Just-in-time είναι το μέρος της Java Virtual Machine (JVM). Ερμηνεύει μέρος του κώδικα Byte που έχει παρόμοια λειτουργικότητα ταυτόχρονα.
Γιατί η Java ερμηνεύεται και μεταγλωττίζεται γλώσσα;
Οι γλώσσες προγραμματισμού ταξινομούνται ως- Γλώσσα Ανώτερου Επιπέδου Π.χ. C ++, Java
- Γλώσσες μεσαίου επιπέδου Π.χ. ντο
- Ex Assembly Γλώσσας χαμηλού επιπέδου
- τέλος το χαμηλότερο επίπεδο ως η Μηχανική Γλώσσα.
Ένας μεταγλωττιστής είναι ένα πρόγραμμα που μετατρέπει ένα πρόγραμμα από ένα επίπεδο γλώσσας σε άλλο. Παράδειγμα μετατροπής του προγράμματος C ++ σε κώδικα μηχανήματος.
Ο μεταγλωττιστής java μετατρέπει τον κώδικα java υψηλού επιπέδου σε bytecode (ο οποίος είναι επίσης ένας τύπος κώδικα μηχανής).
Ένας διερμηνέας είναι ένα πρόγραμμα που μετατρέπει ένα πρόγραμμα σε ένα επίπεδο σε μια άλλη γλώσσα προγραμματισμού στο ίδιο επίπεδο. Παράδειγμα μετατροπής προγράμματος Java σε C ++
Στην Java, η γεννήτρια κώδικα Just In Time μετατρέπει τον bytecode σε εγγενή κώδικα μηχανής που βρίσκεται στα ίδια επίπεδα προγραμματισμού.
Ως εκ τούτου, η Java είναι τόσο μεταγλωττισμένη όσο και ερμηνευμένη γλώσσα.
Γιατί η Java είναι αργή;
Οι δύο κύριοι λόγοι πίσω από τη βραδύτητα της Java είναι
- Dynamic Linking: Σε αντίθεση με το C, η σύνδεση γίνεται κατά το χρόνο εκτέλεσης, κάθε φορά που το πρόγραμμα εκτελείται σε Java.
- Run-time Interpreter: Η μετατροπή του κώδικα byte σε εγγενή κώδικα μηχανήματος πραγματοποιείται κατά τον χρόνο εκτέλεσης στην Java, η οποία περαιτέρω επιβραδύνει την ταχύτητα
Ωστόσο, η τελευταία έκδοση της Java έχει αντιμετωπίσει σε μεγάλο βαθμό τα σημεία συμφόρησης των επιδόσεων.
Περίληψη :
- Πλήρης μορφή JVM είναι η Java Virtual Machine. Το JVM στην Java είναι ο κινητήρας που οδηγεί τον κώδικα Java. Μετατρέπει το bytecode Java σε γλώσσα μηχανών.
- Η αρχιτεκτονική JVM στην Java περιέχει classloader, περιοχή μνήμης, μηχανή εκτέλεσης κ.λπ.
- Στο JVM, ο κώδικας Java συντάσσεται σε bytecode. Αυτός ο κωδικός bytec ερμηνεύεται σε διαφορετικά μηχανήματα
- Το JIT σημαίνει μεταγλωττιστής Just-in-time. Το JIT είναι το μέρος της Java Virtual Machine (JVM). Χρησιμοποιείται για την επιτάχυνση του χρόνου εκτέλεσης
- Σε σύγκριση με άλλα μηχανήματα μεταγλώττισης, το JVM στην Java ενδέχεται να είναι αργό στην εκτέλεση.