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
Scarica

Modello runtime