Fondamenti di informatica Oggetti e Java Luca Cabibbo Modello runtime Capitolo 21 febbraio 2004 1 Modello runtime Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Modello runtime e gestione della memoria Il modello runtime è il modello al tempo di esecuzione dei programmi gestione della memoria e della capacità di elaborazione del calcolatore (da parte della JVM) allocazione delle aree di memoria per lo stato degli oggetti esecuzione delle operazioni da parte degli oggetti la gestione della memoria avviene per aree di memoria la gestione della memoria è dinamica basata sulle operazioni di allocazione e deallocazione di aree di memoria 2 Modello runtime Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Esecuzione di metodi e costruttori Il modello di gestione della memoria per l’esecuzione dei metodi (o costruttori) è basato sui record di attivazione un record di attivazione memorizza le informazioni necessarie a una singola attivazione di un metodo punto di ritorno riferimento all’oggetto esecutore variabili locali esecuzione di un metodo all’invocazione, viene allocato un record di attivazione alla terminazione, il record di attivazione viene deallocato I record di attivazione vengono gestiti mediante una pila di attivazione 3 Modello runtime Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Esecuzione di metodi: un esempio L’applicazione Quadruplo class Quadruplo { public static int somma(int a, int b) { int c; c = a+b; return c; } public static int doppio(int n) { int d; d = somma(n,n); return d; } public static void main(String[] args) { int a, b, c; a = 2; b = somma(a,a); // b = 4 c = doppio(b); // c = 8 } } 4 Modello runtime // somma, 1 // somma, 2 // somma, 3 // doppio, 1 // doppio, 2 // doppio, 3 // // // // main, main, main, main, 1 2 3 4 Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=0 — avvio dell’esecuzione Quadruplo L’esecuzione dell’applicazione Quadruplo viene richiesta mediante l’esecuzione del comando java Quadruplo «oggetto classe» Quadruplo 5 Modello runtime Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=1 — attivazione di main La JVM chiede all’oggetto Quadruplo di eseguire il metodo main main 6 Modello runtime esecutore punto di ritorno a b c Quadruplo JVM Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=2 — assegnazione a una variabile Viene eseguita l’assegnazione a=2 main 7 Modello runtime esecutore punto di ritorno a b c Quadruplo JVM 2 Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=3 — invocazione e attivazione di somma Il metodo main invoca il metodo somma 8 somma esecutore punto di ritorno a b c Quadruplo main, 3, ... 2 2 main esecutore punto di ritorno a b c Quadruplo JVM 2 Modello runtime Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=4 — esecuzione di una assegnazione Viene eseguita l’assegnazione c=a+b 9 somma esecutore punto di ritorno a b c Quadruplo main, 3, ... 2 2 4 main esecutore punto di ritorno a b c Quadruplo JVM 2 Modello runtime Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=5 — terminazione di somma Viene eseguita l’istruzione return c di somma 10 somma esecutore punto di ritorno a b c Quadruplo main, 3, ... 2 2 4 main esecutore punto di ritorno a b c Quadruplo JVM 2 Modello runtime 4 Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=6 — assegnazione del valore restituito Viene completata l’assegnazione alla variabile b main 11 Modello runtime esecutore punto di ritorno a b c Quadruplo JVM 2 4 4 Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=7 — invocazione e attivazione di doppio Il metodo main invoca il metodo doppio 12 doppio esecutore punto di ritorno n d Quadruplo main, 4, ... 4 main esecutore punto di ritorno a b c Quadruplo JVM 2 4 Modello runtime Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=8 — invocazione e attivazione di somma Il metodo doppio invoca il metodo somma 13 somma esecutore punto di ritorno a b c Quadruplo doppio, 2, ... 4 4 doppio esecutore punto di ritorno n d Quadruplo main, 4, ... 4 main esecutore punto di ritorno a b c Quadruplo JVM 2 4 Modello runtime Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=9 — esecuzione di una assegnazione Viene eseguita l’assegnazione c=a+b 14 somma esecutore punto di ritorno a b c Quadruplo doppio, 2, ... 4 4 8 doppio esecutore punto di ritorno n d Quadruplo main, 4, ... 4 main esecutore punto di ritorno a b c Quadruplo JVM 2 4 Modello runtime Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=10 — terminazione di somma Viene eseguita l’istruzione return c di somma 15 somma esecutore punto di ritorno a b c Quadruplo doppio, 2, ... 4 4 8 doppio esecutore punto di ritorno n d Quadruplo main, 4, ... 4 main esecutore punto di ritorno a b c Quadruplo JVM 2 4 Modello runtime 8 Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=11 — assegnazione del valore restituito Viene completata l’assegnazione alla variabile d 16 doppio esecutore punto di ritorno n d Quadruplo main, 4, ... 4 8 main esecutore punto di ritorno a b c Quadruplo JVM 2 4 Modello runtime 8 Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=12 — terminazione di doppio Viene eseguita l’istruzione return d di doppio 17 doppio esecutore punto di ritorno n d Quadruplo main, 4, ... 4 8 main esecutore punto di ritorno a b c Quadruplo JVM 2 4 Modello runtime 8 Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=13 — assegnazione del valore restituito Viene completata l’assegnazione alla variabile c main 18 Modello runtime esecutore punto di ritorno a b c Quadruplo JVM 2 4 8 8 Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=14 — terminazione di main Termina anche l’esecuzione del metodo main main 19 Modello runtime esecutore punto di ritorno a b c Quadruplo JVM 2 4 8 Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Esecuzione di metodi: discussione Osservazioni i record di attivazione sono relativi alle attivazioni dei metodi ordine nell’allocazione/deallocazione di record di attivazione in questo esempio è possibile pensare a una gestione statica della memoria in generale non è possibile 20 Modello runtime Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Gestione degli oggetti Le aree di memoria per gli oggetti sono gestite nello heap quando viene costruito un nuovo oggetto gli viene assegnata un’area di memoria per l’oggetto la distruzione degli oggetti è più complessa garbage collection – possono venire distrutti gli oggetti inutili 21 Modello runtime Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Gestione di oggetti: un esempio class GestioneOggetti { public static void main(String[] args) { Punto x, y; x = new Punto(1,2); // main, 1 y = new Punto(3,4); // main, 2 x.trasla(5,6); // main, 3 } } 22 Modello runtime Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=0 — avvio dell’esecuzione di GestioneOggetti L’esecuzione dell’applicazione GestioneOggetti viene richiesta mediante l’esecuzione del comando java GestioneOggetti «applicazione» GestioneOggetti 23 Modello runtime Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=1 — attivazione di main La JVM chiede all’oggetto GestioneOggetti di eseguire il metodo main main 24 esecutore punto di ritorno x y Modello runtime «oggetto classe» Punto JVM «applicazione» GestioneOggetti Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=2 — creazione di un oggetto Bisogna eseguire la seguente assegnazione x = new Punto(1,2); viene creato l’oggetto p1 di tipo Punto p1 : Punto x y main 25 esecutore punto di ritorno x y Modello runtime «oggetto classe» Punto JVM «applicazione» GestioneOggetti Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=3 — invocazione del costruttore All’oggetto p1 viene richiesta l’esecuzione del costruttore p1 : Punto Punto main 26 esecutore punto di ritorno main, 1, ... 1 xx 2 yy esecutore punto di ritorno x y Modello runtime x y «oggetto classe» Punto JVM «applicazione» GestioneOggetti Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=4 — esecuzione del costruttore Vengono eseguite le istruzioni del costruttore p1 : Punto Punto main 27 esecutore punto di ritorno main, 1, ... 1 xx 2 yy esecutore punto di ritorno x y Modello runtime x y 1 2 «oggetto classe» Punto JVM «applicazione» GestioneOggetti Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=5 — terminazione del costruttore Viene completata l’esecuzione dell’assegnazione alla variabile x p1 : Punto Punto main 28 esecutore punto di ritorno main, 1, ... 1 xx 2 yy esecutore punto di ritorno x y Modello runtime x y p1 1 2 «oggetto classe» Punto JVM «applicazione» GestioneOggetti Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=6 — creazione di un oggetto Bisogna eseguire la seguente assegnazione y = new Punto(3,4); viene creato l’oggetto p2 di tipo Punto p2 : Punto x y p1 : Punto x y main 29 esecutore punto di ritorno x y Modello runtime 1 2 «oggetto classe» Punto JVM «applicazione» GestioneOggetti Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=7 — invocazione del costruttore All’oggetto p2 viene richiesta l’esecuzione del costruttore p2 : Punto x y p1 : Punto Punto main 30 esecutore punto di ritorno main, 2, ... 3 xx 4 yy esecutore punto di ritorno x y Modello runtime x y 1 2 «oggetto classe» Punto JVM «applicazione» GestioneOggetti Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=8 — esecuzione del costruttore Vengono eseguite le istruzioni del costruttore p2 : Punto x y 3 4 p1 : Punto Punto main 31 esecutore punto di ritorno main, 2, ... 3 xx 4 yy esecutore punto di ritorno x y Modello runtime x y 1 2 «oggetto classe» Punto JVM «applicazione» GestioneOggetti Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=9 — terminazione del costruttore Viene completata l’esecuzione dell’assegnazione a y p2 : Punto x y 3 4 p1 : Punto Punto main 32 esecutore punto di ritorno main, 2, ... 3 xx 4 yy esecutore punto di ritorno x y Modello runtime x y p2 1 2 «oggetto classe» Punto JVM «applicazione» GestioneOggetti Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=10 — invocazione e attivazione di trasla Bisogna eseguire la seguente istruzione x.trasla(5,6); p2 : Punto x y 3 4 p1 : Punto trasla main 33 esecutore punto di ritorno main, 3, ... 5 dx 6 dy esecutore punto di ritorno x y Modello runtime x y 1 2 «oggetto classe» Punto JVM «applicazione» GestioneOggetti Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=11 — esecuzione di trasla Vengono eseguite le istruzioni del metodo trasla p2 : Punto x y 3 4 p1 : Punto trasla main 34 esecutore punto di ritorno main, 3, ... 5 dx 6 dy esecutore punto di ritorno x y Modello runtime x y 6 8 «oggetto classe» Punto JVM «applicazione» GestioneOggetti Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=12 — terminazione di trasla Il metodo trasla termina p2 : Punto x y 3 4 p1 : Punto trasla main 35 esecutore punto di ritorno main, 3, ... 5 dx 6 dy esecutore punto di ritorno x y Modello runtime x y 6 8 «oggetto classe» Punto JVM «applicazione» GestioneOggetti Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=13 — terminazione di main Il metodo main termina p2 : Punto x y 3 4 p1 : Punto x y main 36 esecutore punto di ritorno x y Modello runtime 6 8 «oggetto classe» Punto JVM «applicazione» GestioneOggetti Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=14 — distruzione di oggetti inutili La JVM può decidere di distruggere p1 e p2 p2 : Punto x y 3 4 p1 : Punto x y 6 8 «oggetto classe» Punto «applicazione» GestioneOggetti 37 Modello runtime Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl t=15 — distruzione di oggetti inutili Anche gli oggetti Punto e GestioneOggetti possono essere distrutti p2 : Punto x y 3 4 p1 : Punto x y 6 8 «oggetto classe» Punto «applicazione» GestioneOggetti 38 Modello runtime Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Gestione di oggetti: discussione Discussione riferimenti a oggetti come puntatori ad aree di memoria this è l’esecutore del metodo (o costruttore) le variabili d’istanza hanno una vita più lunga delle variabili locali in Java, gli effetti collaterali avvengono solo nello heap 39 Modello runtime Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Vita delle variabili Per vita di un oggetto o variabile si intende l’intervallo di tempo in cui è allocata la corrispondente area di memoria Variabili d’istanza la loro vita coincide con quella dell’oggetto istanza a cui sono associate possono essere accedute da metodi d’istanza e costruttori Variabili locali la loro vita coincide con l’attivazione del metodo (o costruttore) per il quale vengono allocate possono essere accedute solo da quella attivazione di metodo (o costruttore) 40 Modello runtime Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl