400 likes | 521 Views
Modello runtime. Capitolo 21 febbraio 2004. 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)
E N D
Modello runtime Capitolo 21 febbraio 2004 Modello runtime
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 Modello runtime
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 Modello runtime
Esecuzione di metodi: un esempio • L’applicazione Quadruplo • class Quadruplo { • public static int somma(int a, int b) { • int c; // somma, 1 • c = a+b; // somma, 2 • return c; // somma, 3 • } • public static int doppio(int n) { • int d; // doppio, 1 • d = somma(n,n); // doppio, 2 • return d; // doppio, 3 • } • public static void main(String[] args) { • int a, b, c; // main, 1 • a = 2; // main, 2 • b = somma(a,a); // b = 4 // main, 3 • c = doppio(b); // c = 8 // main, 4 • } • } Modello runtime
«oggetto classe» Quadruplo t=0 — avvio dell’esecuzione Quadruplo • L’esecuzione dell’applicazione Quadruplo viene richiesta mediante l’esecuzione del comando java Quadruplo Modello runtime
main esecutore punto di ritorno a b c Quadruplo JVM t=1 — attivazione di main • La JVM chiede all’oggetto Quadruplo di eseguire il metodo main Modello runtime
main esecutore punto di ritorno a b c Quadruplo JVM 2 t=2 — assegnazione a una variabile • Viene eseguita l’assegnazione a=2 Modello runtime
somma esecutore punto di ritorno a b c Quadruplo main, 3, ... 2 2 main esecutore punto di ritorno a b c Quadruplo JVM 2 t=3 — invocazione e attivazione di somma • Il metodo main invoca il metodo somma Modello runtime
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 t=4 — esecuzione di una assegnazione • Viene eseguita l’assegnazione c=a+b Modello runtime
somma esecutore punto di ritorno a b c Quadruplo main, 3, ... 2 4 2 4 main esecutore punto di ritorno a b c Quadruplo JVM 2 t=5 — terminazione di somma • Viene eseguita l’istruzione return c di somma Modello runtime
4 main esecutore punto di ritorno a b c Quadruplo JVM 2 4 t=6 — assegnazione del valore restituito • Viene completata l’assegnazione alla variabile b Modello runtime
doppio esecutore punto di ritorno n d Quadruplo main, 4, ... 4 main esecutore punto di ritorno a b c Quadruplo JVM 2 4 t=7 — invocazione e attivazione di doppio • Il metodo main invoca il metodo doppio Modello runtime
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 t=8 — invocazione e attivazione di somma • Il metodo doppio invoca il metodo somma Modello runtime
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 t=9 — esecuzione di una assegnazione • Viene eseguita l’assegnazione c=a+b Modello runtime
somma esecutore punto di ritorno a b c Quadruplo doppio, 2, ... 4 8 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 t=10 — terminazione di somma • Viene eseguita l’istruzione return c di somma Modello runtime
8 doppio esecutore punto di ritorno n d Quadruplo main, 4, ... 4 8 main esecutore punto di ritorno a b c Quadruplo JVM 2 4 t=11 — assegnazione del valore restituito • Viene completata l’assegnazione alla variabile d Modello runtime
doppio esecutore punto di ritorno n d Quadruplo main, 4, ... 8 4 8 main esecutore punto di ritorno a b c Quadruplo JVM 2 4 t=12 — terminazione di doppio • Viene eseguita l’istruzione return d di doppio Modello runtime
8 main esecutore punto di ritorno a b c Quadruplo JVM 2 4 8 t=13 — assegnazione del valore restituito • Viene completata l’assegnazione alla variabile c Modello runtime
main esecutore punto di ritorno a b c Quadruplo JVM 2 4 8 t=14 — terminazione di main • Termina anche l’esecuzione del metodo main Modello runtime
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 Modello runtime
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 Modello runtime
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 • } • } Modello runtime
«applicazione» GestioneOggetti t=0 — avvio dell’esecuzione di GestioneOggetti • L’esecuzione dell’applicazione GestioneOggetti viene richiesta mediante l’esecuzione del comando java GestioneOggetti Modello runtime
«oggetto classe» Punto main esecutore punto di ritorno x y JVM «applicazione» GestioneOggetti t=1 — attivazione di main • La JVM chiede all’oggetto GestioneOggetti di eseguire il metodo main Modello runtime
p1 : Punto x y «oggetto classe» Punto main esecutore punto di ritorno x y JVM «applicazione» GestioneOggetti t=2 — creazione di un oggetto • Bisogna eseguire la seguente assegnazione • x = new Punto(1,2); • viene creato l’oggetto p1 di tipo Punto Modello runtime
p1 : Punto Punto esecutore punto di ritorno xx yy x y main, 1, ... 1 2 «oggetto classe» Punto main esecutore punto di ritorno x y JVM «applicazione» GestioneOggetti t=3 — invocazione del costruttore • All’oggetto p1 viene richiesta l’esecuzione del costruttore Modello runtime
p1 : Punto Punto esecutore punto di ritorno xx yy x y 1 main, 1, ... 2 1 2 «oggetto classe» Punto main esecutore punto di ritorno x y JVM «applicazione» GestioneOggetti t=4 — esecuzione del costruttore • Vengono eseguite le istruzioni del costruttore Modello runtime
p1 : Punto Punto esecutore punto di ritorno xx yy x y 1 p1 main, 1, ... 2 1 2 «oggetto classe» Punto main esecutore punto di ritorno x y JVM «applicazione» GestioneOggetti t=5 — terminazione del costruttore • Viene completata l’esecuzione dell’assegnazione alla variabile x Modello runtime
p2 : Punto x y p1 : Punto x y 1 2 «oggetto classe» Punto main esecutore punto di ritorno x y JVM «applicazione» GestioneOggetti t=6 — creazione di un oggetto • Bisogna eseguire la seguente assegnazione • y = new Punto(3,4); • viene creato l’oggetto p2 di tipo Punto Modello runtime
p2 : Punto x y p1 : Punto Punto esecutore punto di ritorno xx yy x y 1 main, 2, ... 2 3 4 «oggetto classe» Punto main esecutore punto di ritorno x y JVM «applicazione» GestioneOggetti t=7 — invocazione del costruttore • All’oggetto p2 viene richiesta l’esecuzione del costruttore Modello runtime
p2 : Punto x y 3 4 p1 : Punto Punto esecutore punto di ritorno xx yy x y 1 main, 2, ... 2 3 4 «oggetto classe» Punto main esecutore punto di ritorno x y JVM «applicazione» GestioneOggetti t=8 — esecuzione del costruttore • Vengono eseguite le istruzioni del costruttore Modello runtime
p2 : Punto x y 3 4 p1 : Punto Punto esecutore punto di ritorno xx yy x y 1 p2 main, 2, ... 2 3 4 «oggetto classe» Punto main esecutore punto di ritorno x y JVM «applicazione» GestioneOggetti t=9 — terminazione del costruttore • Viene completata l’esecuzione dell’assegnazione a y Modello runtime
p2 : Punto x y 3 4 p1 : Punto trasla esecutore punto di ritorno dx dy x y 1 main, 3, ... 2 5 6 «oggetto classe» Punto main esecutore punto di ritorno x y JVM «applicazione» GestioneOggetti t=10 — invocazione e attivazione di trasla • Bisogna eseguire la seguente istruzione • x.trasla(5,6); Modello runtime
p2 : Punto x y 3 4 p1 : Punto trasla esecutore punto di ritorno dx dy x y 6 main, 3, ... 8 5 6 «oggetto classe» Punto main esecutore punto di ritorno x y JVM «applicazione» GestioneOggetti t=11 — esecuzione di trasla • Vengono eseguite le istruzioni del metodo trasla Modello runtime
p2 : Punto x y 3 4 p1 : Punto trasla esecutore punto di ritorno dx dy x y 6 main, 3, ... 8 5 6 «oggetto classe» Punto main esecutore punto di ritorno x y JVM «applicazione» GestioneOggetti t=12 — terminazione di trasla • Il metodo trasla termina Modello runtime
p2 : Punto x y 3 4 p1 : Punto x y 6 8 «oggetto classe» Punto main esecutore punto di ritorno x y JVM «applicazione» GestioneOggetti t=13 — terminazione di main • Il metodo main termina Modello runtime
p2 : Punto x y 3 4 p1 : Punto x y 6 8 «oggetto classe» Punto «applicazione» GestioneOggetti t=14 — distruzione di oggetti inutili • La JVM può decidere di distruggere p1 e p2 Modello runtime
p2 : Punto x y 3 4 p1 : Punto x y 6 8 «oggetto classe» Punto «applicazione» GestioneOggetti t=15 — distruzione di oggetti inutili • Anche gli oggetti Punto e GestioneOggetti possono essere distrutti Modello runtime
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 Modello runtime
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) Modello runtime