java:jre

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
java:jre [2016/02/17 16:23]
doufexi Added link for toc, fixed minor typos.
java:jre [2017/02/10 14:01]
gthanos [Το περιβάλλον εκτέλεσης - Java Runtime Environment]
Line 5: Line 5:
 Το κώδικας που προκύπτει από την μεταγλώττιση των προγραμμάτων 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). Το κώδικας που προκύπτει από την μεταγλώττιση των προγραμμάτων 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++. Από την άλλη, τα σύγχρονα υπολογιστικά συστήματα είναι αρκετά ισχυρά,​ ώστε μπορούν να καλύψουν το επιπλέον υπολογιστικό κόστος που εισάγει η μηχανή **JVM** για τις περισσότερες εφαρμογές.+Αν και η δομή του [[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 μπορεί να εκτελεστεί σε υπολογιστές διαφορετικής αρχιτεκτονικής. Συμπερασματικά,​ το ίδιο εκτελέσιμο αρχείο **.class** μπορεί να εκτελεστεί σε υπολογιστές διαφορετικής αρχιτεκτονικής,​ χωρίς να απαιτηθεί η επαναμεταγλώττιση του.
  
 | {{:​java:​java-code-lifecycle1.gif?​450 |}}  |  {{:​java:​java-code-lifecycle2.gif?​430 |}} | | {{:​java:​java-code-lifecycle1.gif?​450 |}}  |  {{:​java:​java-code-lifecycle2.gif?​430 |}} |
- 
-|{{:​java:​java-code-lifecycle3.gif?​ |}} | 
- 
-| Στην παρακάτω εικόνα απεικονίζεται η διάκριση μεταξύ της εκτέλεσης ενός κώδικα **C/C++** και ενός κώδικα **Java**. | {{:​java:​java_vs_c_.png?​500 |}} | 
- 
-<WRAP important round> 
-Κάθε μεταγλωττιστής Java μεταγλωττίζει κώδικα για συγκεκριμένη έκδοση της γλώσσας. Εάν χρησιμοποιήσετε ένα JVM παλαιότερης έκδοσης (π.χ. Java 7) για να εκτελέσετε κώδικα που έχει μεταγλωττιστεί με χρήση compiler νεότερης έκδοσης (π.χ. Java 8) τότε καταλήγετε σε αποτυχία εκτέλεσης λόγω ασυμβατότητας μεταξύ του μεταγλωττισμένου κώδικα και της μηχανής με την οποία επιχειρείτε να τον εκτελέσετε. 
- 
-Αντίθετα εάν επιχειρήσετε να εκτελέσετε κώδικα μεταγλωττισμένο από compiler παλαιότερης έκδοσης (π.χ. Java 7) σε μηχανή νεότερης έκδοσης (π.χ. Java 8) τότε το πρόγραμμα σας θα εκτελεστεί κανονικά. Ισχύει δηλαδή η αρχή της συμβατότητας προς τα πίσω, όχι όμως και το αντίστροφο. 
-</​WRAP>​ 
  
 ==== Το περιβάλλον εκτέλεσης - Java Runtime Environment ==== ==== Το περιβάλλον εκτέλεσης - Java Runtime Environment ====
  
-|{{ :​java:​jre-stack.png?​300|}}| + {{ :​java:​jre-stack.png?​1000|}}  ​| ​  | To περιβάλλον εκτέλεσης οποιουδήποτε προγράμματος Java (το λεγόμενο JRE) αποτελείται από τα εξής ​a) Java Virtual Machine (JVM) b) Java API classes (standard βιβλιοθήκη της Java) |
- +
-To περιβάλλον εκτέλεσης οποιουδήποτε προγράμματος Java (το λεγόμενο JRE) αποτελείται από τα εξής+
-  - Java Virtual Machine (JVM) +
-  - Java API classes (standard βιβλιοθήκη της Java) +
- +
-Χωρίς τα δύο παραπάνω κανένα πρόγραμμα Java δεν μπορεί να εκτελεστεί.+
  
 ===== Το περιβάλλον μεταγλώττισης ===== ===== Το περιβάλλον μεταγλώττισης =====
java/jre.txt · Last modified: 2017/02/16 06:59 by gthanos