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