Η ιδεατή μηχανή της Java

Σχετικά έγγραφα
05β Η ιδεατή μηχανή της Java

03 Η ιδεατή μηχανή της Java

Αντικειμενοστρεφής Προγραμματισμός

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

1. Ξεκινώντας. 1.1 Τι είναι η Java. PDF created with FinePrint pdffactory Pro trial version

Είναι μια αλληλουχία κατάλληλων οδηγιών(εντολών) που εκτελεί ο υπολογιστής για την επίλυση ενός προβλήματος.

HelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #1 ο : Εισαγωγή στο Περιβάλλον Ανάπτυξης (IDE)

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #1 ο : Εισαγωγή στο Περιβάλλον Ανάπτυξης (IDE)

. Μεθοδολογία Προγραμματισμού. Εισαγωγή στη Java. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:


ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07

Διάλεξη 1: Αντικειμενοστρεφής Προγραμματισμός -Εισαγωγή. Διδάσκων: Παναγιώτης Ανδρέου

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 26/2/2008

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Java sessions. Part 1 - Βασικά έννοιες - μέθοδοι

Τι σημαίνει; n Για την αποδοτική δέσμευση δομών δεδομένων μη. n Για την αποφυγή «διαρροών μνήμης» (memory leaks).

Λειτουργικά Συστήματα. Εισαγωγή

ΚΑΛΑΝΙΔΟΥ ΓΑΛΗΝΗ ΚΑΝΑΚΟΥΣΑΚΗ ΜΑΡΙΑ

Εργαλεία του JDK. Β.1 Εργαλεία του JDK. Β.2 Μεταγλωττιστής javac. Τα πιο βασικά εργαλεία του JDK είναι τα παρακάτω.

08 Η γλώσσα UML I. Τεχνολογία Λογισμικού. Σχολή Hλεκτρολόγων Mηχανικών & Mηχανικών Yπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο. Χειμερινό εξάμηνο

Υποστηρικτικό υλικό Σημειώσεις

03 Τεχνική διαχείριση έργων λογισμικού

Βρίγκας Μιχαήλ Α.Μ.744 Μπράχος Χ. Ευάγγελος Α.Μ.795

Οντοκεντρικός Προγραμματισμός

Σχεδίαση Γλωσσών Προγραμματισμού. Εαρινό Εξάμηνο Lec03 18/02/2019

B. Ενσωμάτωση Ιθαγενών Μεθόδων

2.1 Αντικειµενοστρεφής προγραµµατισµός

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 1: Εισαγωγικές έννοιες

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

ΕΠΛ233 Βασικά στοιχεία προγραµµατισµού στη JAVA

Τεχνολογία Λογισμικού

Εισαγωγή στον Προγραμματισμό

8. Μέθοδοι (Methods)

! Ο καλός προγραμματισμός επιβάλλει την αποδοτική χρήση. ! Είναι σημαντικό να καταλαβαίνουμε τις διαδικασίες

Λειτουργικά Συστήματα (Λ/Σ)

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

Εισαγωγή στον Προγραμματισμό

JAVA TUTORIAL ΠΕΡΙΕΧΟΜΕΝΑ. ΚΕΦΑΛΑΙΟ 1. Τί κάνει τη Java να ξεχωρίζει; Εγκαθιστώντας τη Java

ΕΠΛ 233: Αντικειμενοστρεφής Προγραμματισμός (Object-oriented programming)

ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ

Διάλεξη 5: Κλάσεις και Αντικείμενα. Διδάσκων: Παναγιώτης Ανδρέου

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java

ΚΕΦΑΛΑΙΟ 2: Τύποι δεδομένων και εμφάνιση στοιχείων...33

ΑΝΑΚΕΦΑΛΑΙΩΣΗ. Τα βασικά για την γλώσσα Java

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

Δημιουργία μιας εφαρμογής Java με το NetBeans

HelloApplet. Παύλος Εφραιμίδης Java Applets 1

ΕΠΛ233 ΠΛΗΡΟΦΟΡΙΑ ΤΥΠΟΥ. Type Information. Μ. Δικαιάκος

Αντικειµενοστρεφής Προγραµµατισµός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

ProcSim οδηγίες χρήσης.

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Εισαγωγή στην Πληροφορική

Επιτεύγµατα των Λ.Σ.

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ

Ειδικά Θέματα Προγραμματισμού

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

Κλάσεις και Αντικείµενα

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

06 Αντικειμενοστρεφής ανάλυση και σχεδιασμός

Digital Academy. Εισαγωγή στην ανάπτυξη Android Εφαρμογών

ΚΕΦΑΛΑΙΟ 6. Περιβάλλοντα Ανάπτυξης Εφαρμογών. ΚΕΦΑΛΑΙΟ 6 Περιβάλλοντα Ανάπτυξης Εφαρμογών. Α Γενικού Λυκείου

Εισαγωγικές έννοιες. Ιωάννης Γ. Τσούλος 2014

Τεχνολογία Λογισμικού

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

Διδάσκων: Παναγιώτης Ανδρέου

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Ευφυείς Τεχνολογίες ----Πράκτορες

Αντικειμενοστρεφής Προγραμματισμός

Γενικά (για τις γραπτές εξετάσεις)

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Περιγραφή Μαθήματος ΠΕΡΙΓΡΑΦΗ ΜΑΘΗΜΑΤΟΣ. Γεώργιος Παπαϊωάννου ( )

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

. Μεθοδολογία Προγραμματισμού. Abstract Κλάσεις και Interfaces. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

Μεταγλωττιστές. Δημήτρης Μιχαήλ. Ακ. Έτος Εισαγωγή. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

02 Αντικειμενοστρεφής Προγραμματισμός

Ειδικά Θέματα Προγραμματισμού

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα

Εισαγωγή στην αντικειµενοστρεφή τεχνολογία

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

Οντοκεντρικός Προγραμματισμός


Λειτουργικά Συστήματα

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Μεταγλώτιση, σύνδεση

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ

Οντοκεντρικός Προγραμματισμός

ΕΠΛ233 Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA

ΚΕΦΑΛΑΙΟ 1. Εισαγωγή στην Python. 1.1 Εισαγωγή

Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής. Mic-1 MMV. Προσομοιωτής Αρχιτεκτονικής H/Y

11β Δομικά πρότυπα σχεδίασης

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

Transcript:

Η ιδεατή μηχανή της Java Τεχνολογία Λογισμικού Τμήμα Πληροφορικής & Τηλεπικοινωνιών Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών Εαρινό εξάμηνο 2017 18 Δρ. Κώστας Σαΐδης saiko@di.uoa.gr

Περιεχόμενα Η πλατφόρμα της Java γενικά Εισαγωγή στο Java Virtual Machine JVM Γλώσσες που υποστηρίζονται από το JVM πέρα της Java 2

Η πλατφόρμα της Java Java Runtime Environment JRE Java virtual machine Java class library Java Development Kit JDK JRE + Eργαλεία ανάπτυξης κώδικα σε γλώσσα Java javac java compiler javadoc παραγωγή HTML τεκμηρίωσης από τον πηγαίο κώδικα jdb debugger κ.ά. 3

Java Class Library Τα βασικά APIs I/O & Networking Files, Sockets, κ.ά Threads Collections Lambdas & Streams v8 Security & Encryption SQL Databases XML JSON GUI swing 4

Ανάπτυξη της Java Java Community Process JCP Java Specification Requests JSRs Reference implementations of APIs Open JDK GNU GPL v2 Reference implementation of Java JVM + Tools + Class Library 5

Σύντομη εισαγωγή στο JVM 6

Βασικά χαρακτηριστικά Διαλειτουργικότητα Portability Write once, run everywhere Αυτόματη διαχείριση μνήμης Garbage collection Υποστήριξη για πολλαπλά νήματα threads Just In Time Μεταγλώττιση Modules v9 Ahead of time Μεταγλώττιση v9+ Γρήγορο, στιβαρό, αξιόπιστο και διεθνώς διαδεδομένο περιβάλλον εκτέλεσης σε servers, desktops, κινητά, άλλες συσκευές 7

Η δομή του JVM By Michelle Ridomi Own work, CC BY SA 4.0, https://commons.wikimedia.org/w/index.php?curid=35963523 8

Η δομή του JVM Method area: αποθήκευση των κλάσεων και των σχετικών τους πληροφοριών μέθοδοι, πεδία, υπερ κλάσεις, κτλ.. Heap area: αποθήκευση όλων των αντικειμένων / στιγμιοτύπων. Language stacks: κάθε thread έχει τη δική του στοίβα, όπου αποθηκεύονται τοπικές μεταβλητές, ενδιάμεσα αποτελέσματα, κτλ σε μορφή stack frames. PC registers: Program counter register που περιέχει τη διεύθυνση του υπό εκτέλεση bytecode instruction. Native method stacks: αποθηκεύονται όλες οι native μέθοδοι της εφαρμογής. 9

Class Loader Μηχανισμός που επιτρέπει την παραμετροποιήσιμη προγραμματιστικά φόρτωση των κλάσεων στο JVM.class files, bytecode Οι class loaders είναι "κανονικά" Java αντικείμενα τύπου java.lang.classloader Μια εφαρμογή Java μπορεί να έχει πολλαπλούς class loaders 10

Ορισμός κλάσεων java.lang.class Κατά την εκτέλεση του προγράμματος, οι κλάσεις αναπαρίστανται από "κανονικά" Java αντικείμενα reflection Προσοχή Για την ίδια κλάση, όταν αυτή φορτώνεται από διαφορετικούς class loaders, παράγονται διαφορετικά Class αντικείμενα. 11

Βήματα 1. Χρήση του class loader για φόρτωση της κλάσης από το δίσκο, το δίκτυο ή από κάπου αλλού π.χ. δυναμική επιτόπου παραγωγή της, on the fly 2. Σύνδεση της κλάσης linking Επιβεβαίωση bytecode Εντοπισμός και αρχικοποίηση εξαρτήσεων 3. Αρχικοποίηση της κλάσης static πεδία, blocks και μέθοδοι 12

Αρχικοποίηση κλάσεων Οκνηρή / lazy ακριβώς πριν την πρώτη χρήση τους. Που είναι πότε; Πριν στιγμιοτυπιθεί ένα αντικείμενο της κλάσης. Πριν κληθεί μια static μέθοδος της κλάσης. Πριν προσπελαστεί ένα static πεδίο της κλάσης είτε για ανάγνωση, είτε για εγγραφή της τιμής του Η αρχικοποίηση μιας κλάσης προϋποθέτει την αρχικοποίηση της υπερ κλάσης της super class. Η αρχικοποίηση μιας κλάσης γίνεται μόνο μία φορά ανά class loader. 13

Διάφανη χρήση των class loaders από το JVM To JVM διαθέτει έναν Bootstap class loader για τη φόρτωση των class libraries. Το JVM χρησιμοποιεί έναν γενικής χρήσης class loader για την φόρτωση των κλάσεων της εφαρμογής συνήθως τύπου java.net.urlclassloader. Δεν είναι σύνηθες να απαιτείται η συγγραφή class loader από τον προγραμματιστή. 14

Η μηχανή εκτέλεσης του JVM Εκτέλεση του bytecode. Διερμηνέας / interpreter. Εκτέλεση γραμμή γραμμή. Just in time μεταγλωττιστής / compiler. Μεταγλώττιση του bytecode σε native κώδικα ανάλογα με τη χρήση. Δραστική βελτίωση στην απόδοση. Garbage collector. Εκτελείται στο παρασκήνιο και απελευθερώνει/διαχειρίζεται τη μνήμη της εφαρμογής heap. 15

To JVM Heap Όλα τα αντικείμενα αποθηκεύονται στο Heap. 16

Όλα μα όλα τα αντικείμενα java.lang.outofmemoryerror συνήθως λόγω μη διαθέσιμου ελεύθερου χώρου στο Heap Ειδικές παράμετροι στην εκκίνηση του JVM Ελάχιστο heap size: Xms512M Μέγιστο heap size: Xmx2048M 17

Το JVM διαχειρίζεται το Heap Με διάφανο για τον προγραμματιστή τρόπο. Αυτόματη δέσμευση και αποδεύσμευση μνήμης pointers. Αυτόματοι έλεγχοι εύρους buffer overflows & underflows. Garbage collection: αυτόματη απελευθέρωση μνήμης των αντικειμένων που δε χρησιμοποιούνται πλέον από το πρόγραμμα. 18

Garbage collection Θεμελιώδης έννοια: reachability of references/objects. Διάφοροι αλγόριθμοι: καταμέτρησης αναφορών, σημείωσης και εκκαθάρισης, σειριακοί, παράλληλοι, με ολική παύση του προγράμματος stop the world, με συμπύκνωση της θρυμματισμένης μνήμης, με έμφαση στην ταχύτητα δέσμευσης/αποδέσμευσης. 19

Στα σύγχρονα JVM Generational Garbage Collector 20

Βασική ιδέα Κατηγοριοποίηση των αντικειμένων με βάση τη "γενιά" τους. Τα περισσότερα αντικείμενα "πεθαίνουν νέα". Κάποια, λίγα, αντικείμενα "ζουν" για πολύ μεγάλα διαστήματα. Σπάνια τα "παλιά" αντικείμενα αναφέρονται σε "νέα". Μετακίνησή των αντικειμένων από τις νεότερες στις παλαιότερες γενιές ανάλογα με το πόσες "συλλογές/ εκτελέσεις" του GC έχουν καταφέρει να επιβιώσουν. Ταχύτερη συλλογή χώρου από τις νέες γενιές: μικρότερες παύσεις. 21

Garbage First Garbage Collector Java 9 22

Εκτέλεση του JVM $ java cp CLASSPATH package.of.mainclass $ java jar app.jar Classpath: λίστα από τοποθεσίες που περιέχουν.class αρχεία συνήθως φάκελοι ή jar αρχεία MainClass: το πλήρες όνομα της κλάσης που περιέχει την main μέθοδο Jar file: αρχείο zip με κλάσεις.class και λοιπά στοιχεία λειτουργίας manifests, resources, κ.ά 23

Έννοιες Language abstractions Classes, Interfaces, Types Packages = namespaces of the above Modules Java 9, = strongly encapsulated namespaces of packages Application abstractions Components logical Layers logical Tiers physical Subsystems logical or physical 24

Java packages και δομή καταλόγων package com.foo.bar; class Main {... } src com foo bar Main.java Θα επανέλθουμε 25

Java 9 Modules module com.foo.bar { requires com.foo.baz; exports com.foo.bar.alpha; exports com.foo.bar.beta; } Δεν θα μας απασχολήσουν στο μάθημα 26

JVM Γλώσσες 27

Java Main.java class Main { public static void main(string[] args) { System.out.println("Hello world"); } } $ javac Main.java //μεταγλώττιση σε JVM bytecode (.class) $ java cp. Main //εκτέλεση του JVM με όρισμα τη Main κλάση Hello world 28

Scala Main.scala object Main { def main(args: Array[String]) { println("hello, world!") } } $ scalac Main.scala $ java cp.:scala library.jar Main Hello world $ scala Main Hello world 29

Scala scripts main.sh #!/usr/bin/env scala object HelloWorld extends App { println("hello, world!") } HelloWorld.main(args) $./main.sh Hello world 30

Groovy Main.groovy class Main { static void main(string[] args) { println("hello world") } } $ groovyc Main.groovy $ java cp.:groovy all.jar Main Hello world 31

Groovy scripts Main2.groovy println "Hello world" $ groovy Main2.groovy Hello world $ groovyc Main2.groovy $ java cp.:groovy all.jar Main2 Hello world Αλλά και $ groovy Main.groovy Hello world 32

JRuby main.rb puts "Hello world" $ jrubyc main.rb $ java cp.:various ruby.jars main Hello world $ jruby main.rb Hello world 33