| Both sides previous revision
Previous revision
Next revision
|
Previous revision
Next revision
Both sides next revision
|
java:jre [2020/02/20 15:15] gthanos [Garbage Collection] |
java:jre [2020/02/21 10:35] gthanos [Το περιβάλλον μεταγλώττισης] |
| O κώδικας που προκύπτει από την μεταγλώττιση των προγραμμάτων Java, απαιτεί για την εκτέλεση του μία μηχανή εκτέλεσης κώδικα ([[wp>Java_bytecode|Java Byte Code]]), το λεγόμενο [[wp>Java_virtual_machine| Java Virtual Machine (JVM)]]. To [[wp>Java_virtual_machine| JVM ]] είναι μία εικονική μηχανή εκτέλεσης κώδικα (για αυτό και ο όρος Virtual). H μηχανή JVM δεν υλοποιείται σε υλικό (hardware) αλλά σε λογισμικό (software). | O κώδικας που προκύπτει από την μεταγλώττιση των προγραμμάτων Java, απαιτεί για την εκτέλεση του μία μηχανή εκτέλεσης κώδικα ([[wp>Java_bytecode|Java Byte Code]]), το λεγόμενο [[wp>Java_virtual_machine| Java Virtual Machine (JVM)]]. To [[wp>Java_virtual_machine| JVM ]] είναι μία εικονική μηχανή εκτέλεσης κώδικα (για αυτό και ο όρος Virtual). H μηχανή JVM δεν υλοποιείται σε υλικό (hardware) αλλά σε λογισμικό (software). |
| |
| Αν και η δομή του [[wp>Java_bytecode|Java Byte Code]] επιτρέπει την γρήγορη εκτέλεση του κώδικα **Java** σε οποιαδήποτε αρχιτεκτονική. Παρ' όλα αυτά, δεν πρέπει να ξεχνάμε ότι καθώς εμπλέκεται λογισμικό στην εκτέλεση του κώδικα (//αντί για εκτέλεση απευθείας πάνω στο υλισμικό//), η γλώσσα Java δεν μπορεί παρά να είναι πιο αργή στην εκτέλεση της από οποιαδήποτε γλώσσα που εκτελείται απευθείας στο hardware, όπως οι C/C++. | Αν και η δομή του [[wp>Java_bytecode|Java Byte Code]] επιτρέπει την γρήγορη εκτέλεση του κώδικα **Java** σε οποιαδήποτε αρχιτεκτονική, δεν πρέπει να παραγνωρίζουμε ότι εφόσον εμπλέκεται λογισμικό στην εκτέλεση του κώδικα (//αντί για εκτέλεση απευθείας πάνω στο υλισμικό//), η γλώσσα Java δεν μπορεί παρά να είναι πιο αργή στην εκτέλεση της από οποιαδήποτε γλώσσα που εκτελείται απευθείας στο hardware, όπως οι C ή C++. |
| |
| Στα παρακάτω σχήματα απεικονίζεται η διαδικασία μεταγλώττισης και εκτέλεσης ενός προγράμματος **Java**. O κώδικας Java μεταγλωττίζεται σε διαδικά αρχεία **.class** τα οποία είναι εκτελέσιμα από το JVM. To JVM μπορεί να εκτελεστεί σε υπολογιστές διαφορετικής αρχιτεκτονικής. Συμπερασματικά, το ίδιο εκτελέσιμο αρχείο **.class** μπορεί να εκτελεστεί σε υπολογιστές διαφορετικής αρχιτεκτονικής, χωρίς να απαιτηθεί η επαναμεταγλώττιση του. | Στα παρακάτω σχήματα απεικονίζεται η διαδικασία μεταγλώττισης και εκτέλεσης ενός προγράμματος **Java**. O κώδικας Java μεταγλωττίζεται σε διαδικά αρχεία **.class** τα οποία είναι εκτελέσιμα από το JVM. To JVM είναι διαθέσιμο για διαφορετρικά λειτουργικά συστήματα (π.χ. Windows και Unix/Linux) και για διαφορετικές αρχιτεκτονικές υλισμικού (ARM, i386 κ.α.). Με τη βοήθεια του JVM, το ίδιο εκτελέσιμο αρχείο **.class** μπορεί να εκτελεστεί σε υπολογιστές διαφορετικής αρχιτεκτονικής, χωρίς να απαιτείται η επαναμεταγλώττιση του. |
| |
| | {{:java:java-code-lifecycle1.gif?390 |}} | {{:java:java-code-lifecycle2.gif?430 |}} | | | {{:java:java-code-lifecycle1.gif?390 |}} | {{:java:java-code-lifecycle2.gif?430 |}} | |
| Το περιβάλλον μεταγλώττισης αποτελείται από το Java compiler (**javac**). Κάθε κλάση στη Java οφείλει να είναι ένα αυτόνομο αρχείο, του οποίου το όνομα να είναι ίδιο με το όνομα της κλάσης ακολουθούμενο από την κατάληξη **.java**. Για παράδειγμα, η κλάση **FirstProgram** πρέπει να είναι σε ένα αρχείο με όνομα **FirstProgram.java**. | Το περιβάλλον μεταγλώττισης αποτελείται από το Java compiler (**javac**). Κάθε κλάση στη Java οφείλει να είναι ένα αυτόνομο αρχείο, του οποίου το όνομα να είναι ίδιο με το όνομα της κλάσης ακολουθούμενο από την κατάληξη **.java**. Για παράδειγμα, η κλάση **FirstProgram** πρέπει να είναι σε ένα αρχείο με όνομα **FirstProgram.java**. |
| |
| Κάθε κλάση μεταγλωττίζεται με την εντολή **javac** ακολουθούμενη από το όνομα του αρχείου όπου βρίσκεται η κλάση, δηλ | Κάθε κλάση μεταγλωττίζεται με την εντολή **javac** ακολουθούμενη από το όνομα του αρχείου όπου βρίσκεται η κλάση, δηλαδή |
| <code> | <code> |
| javac FirstProgram.java | javac FirstProgram.java |