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
java:jre [2017/02/10 14:01]
gthanos [Το περιβάλλον εκτέλεσης - Java Runtime Environment]
java:jre [2017/02/16 06:59] (current)
gthanos [Το περιβάλλον εκτέλεσης - Java Runtime Environment]
Line 1: Line 1:
 ====== Το περιβάλλον μεταγλώττισης και εκτέλεσης Java (JRE/JDK) ====== ====== Το περιβάλλον μεταγλώττισης και εκτέλεσης Java (JRE/JDK) ======
  
-H Java είναι μία γλώσσα **υψηλού επιπέδου** η οποία όταν μεταγλωττίζεται παράγεται ένας ιδιαίτερος τύπος κώδικα **χαμηλού επιπέδου** που ονομάζεται [[wp>​Java_bytecode|Java Byte Code]]. Το [[wp>​Java_bytecode|Java Byte Code]] ​ομοιάζει με assembly με την ιδιαιτερότητα όμως ότι δεν συμπίπτει με κάποια υφιστάμενη αρχιτεκτονική υπολογιστή. Ο κώδικας αυτός είναι εύκολο να μεταγλωττιστεί και να εκτελεστεί σε πραγματικό χρόνο από μία εικονική μηχανή εκτέλεσης κώδικα (Virtual Machine) στην γλώσσα μηχανής του κάθε υπολογιστή. Η διαδικασία μεταγλώττισης και εκτέλεσης ψευδο-κώδικα σε πραγματικό χρόνο ονομάζεται [[wp>​Just-in-time_compilation]].+H Java είναι μία γλώσσα **υψηλού επιπέδου** η οποία όταν μεταγλωττίζεται παράγεται ένας ιδιαίτερος τύπος κώδικα **χαμηλού επιπέδου** που ονομάζεται [[wp>​Java_bytecode|Java Byte Code]]. Το [[wp>​Java_bytecode|Java Byte Code]] μοιάζει με assembly με την ιδιαιτερότητα όμως ότι δεν συμπίπτει με κάποια υφιστάμενη αρχιτεκτονική υπολογιστή. Ο κώδικας αυτός είναι εύκολο να μεταγλωττιστεί και να εκτελεστεί σε πραγματικό χρόνο από μία εικονική μηχανή εκτέλεσης κώδικα (Virtual Machine) στην γλώσσα μηχανής του κάθε υπολογιστή. Η διαδικασία μεταγλώττισης και εκτέλεσης ψευδο-κώδικα σε πραγματικό χρόνο ονομάζεται [[wp>​Just-in-time_compilation]].
  
-Το κώδικας που προκύπτει από την μεταγλώττιση των προγραμμάτων 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++. ​ Αν και η δομή του [[wp>​Java_bytecode|Java Byte Code]] επιτρέπει την γρήγορη εκτέλεση του κώδικα **Java** σε οποιαδήποτε αρχιτεκτονική. Παρ'​ όλα αυτά, δεν πρέπει να ξεχνάμε ότι καθώς ​ εμπλέκεται λογισμικό στην εκτέλεση του κώδικα (//αντί για εκτέλεση απευθείας πάνω στο υλισμικό//​),​ η γλώσσα Java δεν μπορεί παρά να είναι πιο αργή στην εκτέλεση της από οποιαδήποτε γλώσσα που εκτελείται απευθείας στο hardware, όπως οι C/​C++. ​
Line 9: Line 9:
 Στα παρακάτω σχήματα απεικονίζεται η διαδικασία μεταγλώττισης και εκτέλεσης ενός προγράμματος **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?​390 |}}  |  {{:​java:​java-code-lifecycle2.gif?​430 |}} |
  
 ==== Το περιβάλλον εκτέλεσης - Java Runtime Environment ==== ==== Το περιβάλλον εκτέλεσης - Java Runtime Environment ====
  
-|  ​{{ :​java:​jre-stack.png?​1000|}}  ​|   | To περιβάλλον εκτέλεσης οποιουδήποτε προγράμματος Java (το λεγόμενο ​JRE) αποτελείται από τα εξής ​a) Java Virtual Machine (JVM) b) Java API classes (standard βιβλιοθήκη της Java) |+{{ :​java:​jre-stack.png?​250Java Runtime Environment}}  ​Το περιβάλλον εκτέλεσης οποιουδήποτε προγράμματος Java (Java Runtime Environment - JRE) αποτελείται από τα εξής
 +  - Java Virtual Machine (JVM)  
 +  - Java API classes (standard βιβλιοθήκη της Java)
  
 ===== Το περιβάλλον μεταγλώττισης ===== ===== Το περιβάλλον μεταγλώττισης =====
Line 26: Line 28:
 Το αποτέλεσμα είναι ένα πρόγραμμα byte-code του οποίου το όνομα αρχείου είναι το ίδιο με το όνομα της κλάσης ακολουθούμενο από την κατάληξη **.class**, για το παραπάνω παράδειγμα,​ το εκτελέσιμο αρχείο έχει όνομα **FirstProgram.class**. Το αποτέλεσμα είναι ένα πρόγραμμα byte-code του οποίου το όνομα αρχείου είναι το ίδιο με το όνομα της κλάσης ακολουθούμενο από την κατάληξη **.class**, για το παραπάνω παράδειγμα,​ το εκτελέσιμο αρχείο έχει όνομα **FirstProgram.class**.
  
 +/*
 ===== Το πρώτο μου πρόγραμμα ===== ===== Το πρώτο μου πρόγραμμα =====
  
Line 43: Line 46:
 } }
 </​code>​ </​code>​
- 
-Ο παραπάνω κώδικας μεταγλωττίζεται ως εξής: ​ 
-<​code>​ 
-javac MyFirstProgram.java 
-</​code>​ 
- 
-και εκτελείται ως εξής: ​ 
-<​code>​ 
-java MyFirstProgram 
-ή  
-java MyFirstProgram <​YourName>​ 
-</​code>​ 
- 
-Παρατηρήστε ότι εκτελούμε καλώντας το όνομα της κλάσης. Απαραίτητη προϋπόθεση για την εκτέλεση ενός προγράμματος Java είναι η ύπαρξη της μεθόδου **main** μέσα στην κλάση την οποία επιχειρούμε να εκτελέσουμε. Η μέθοδος **main** ορίζεται ως εξής: 
- 
-<code java> 
-public static void main(String args[]) { 
-   ​... ​ 
-   ​σώμα της main  
-   ... 
-} 
-</​code>​ 
- 
-όπου ''​String args[]''​ είναι ένας πίνακας από ορίσματα τύπου [[ http://​docs.oracle.com/​javase/​7/​docs/​api/​java/​lang/​String.html |java.lang.String]],​ τα οποία λαμβάνει το πρόγραμμα από την γραμμή εντολών. Αναλυτικότερα τα ορίσματα έχουν ως εξής. 
-  - args[0]: το 1ο όρισμα 
-  - args[1]: το 2ο όρισμα 
-  - args[N-1]: το N-οστό όρισμα. 
  
 <WRAP center round todo 60%> <WRAP center round todo 60%>
 Κατεβάστε και τρέξτε το παραπάνω αρχείο ακολουθώντας τις παραπάνω οδηγίες μεταγλώττισης και εκτέλεσης. Κατεβάστε και τρέξτε το παραπάνω αρχείο ακολουθώντας τις παραπάνω οδηγίες μεταγλώττισης και εκτέλεσης.
 </​WRAP>​ </​WRAP>​
 +*/
  
-===== Garbage Collection ===== +/ροηγούμενο[[java:| ]] |*/ [[:toc Περιεχόμενα ​]] | Επόμενο: [[netbeans:intro| Εγκατάσταση του περιβάλλοντος ανάπτυξης JDK/NetBeans]]|
- +
-Μία από τις βασικές ιδιότητες τις Java είναι ότι ο προγραμματιστής δεν απαιτείται να ασχοληθεί με την δέσμευση και κυρίως με την αποδέσμευση μνήμης στο πρόγραμμα του. Η Java δεσμεύει μνήμη δυναμικά για όλα τα αντικείμενα που δημιουργεί και αποδεσμεύει την μνήμη αυτόματα μέσω ενός μηχανισμού που ονομάζεται ​//Garbage Collector//​. Ο μηχανισμός αυτός έχει την δυνατότητα να αναλύει την δομή της δεσμευμένης μνήμης κάθε προγράμματος και να εντοπίζει τα αντικείμενα που δεν είναι πλέον σε χρήση. Για τα αντικείμενα αυτά αποδεσμεύει την μνήμη που καταλαμβάνουν. Ο μηχανισμός αυτός δεν ελέγχεται από τον προγραμματιστή· συνήθως πρόκειται για ένα ξεχωριστό thread το οποίο εκτελείται για κάθε εκτελούμενο ​Java πρόγραμμα σε τακτά χρονικά διαστήματα. +
- +
-Δείτε περισσότερα ​[[ java:objects#​Garbage Collection|εδώ]] και ​[[http://​el.wikipedia.org/​wiki/​%CE%A3%CF%85%CE%BB%CE%BB%CE%BF%CE%B3%CE%AE_%CE%B1%CF%80%CE%BF%CF%81%CF%81%CE%B9%CE%BC%CE%BC%CE%AC%CF%84%CF%89%CE%BD_%28%CF%85%CF%80%CE%BF%CE%BB%CE%BF%CE%B3%CE%B9%CF%83%CF%84%CE%AD%CF%82%29δώ]]+
- +
-|Προηγούμενο: [[java:install|Εγκατάσταση του περιβάλλοντος ανάπτυξης JDK ]] | [[:toc | Περιεχόμενα ]] | Επόμενο:​ [[java:​introduction|Εισαγωγή στην γλώσσα προγραμματισμού Java]]|+
  
  
java/jre.1486735282.txt.gz · Last modified: 2017/02/10 14:01 by gthanos