Java Virtual Machine
Massa Laura
Mela Enrica
1
La macchine astratte

La tendenza comune nella nuova tecnologia
software è quella di conseguire la portabilità
dei programmi: dal programma compilato in
una forma intermedia in una definizione
astratta di macchina virtuale.
2
Situazione ideale
Front-end
indipendente dall’hardware
Back-end
indipendente dal linguaggio del
SOURCE CODE
3
Linguaggio intermedio


Molte di queste rappresentazioni di linguaggi
intermedi sono basate sulle macchine
astratte a stack
P-code: particolare rappresentazione
inventata cone forma intermedia per ETH
compilatori Pascal( diventata poi dominante
come codice macchina per il sistema UCSD
Pascal)
4
Programma codificato per una
macchina astratta
compilatore
interprete
Codice eseguibile
(dipende dall’architettura)
Emula la macchine astratta
lento
Codice più denso
5





UCSD usa interprete
codice molto intenso e compatto
primi usi su microcomputer
linguaggi ad alto livello su microcomputer
la portabilità del sistema di linguaggio su una
nuova macchina si riduce alla creazione di un
nuovo interprete.
6
Architecture Neutral Distribuition
Form (ANDF)


Idea di base: distribuire programmi in una
forma intermedia e completare il compito
della compilazione durante l’installazione.
Nella forma intermedia, durante la
compilazione, tutti gli accessi ad indirizzi
sono lasciati in forma simbolica
7
Macchine astratte


Nei tardi ’90 Sun Microstystem distribuisce il
sistema di linguaggio Java, basato su una
macchina astratta a stack, e come l’ANDF
usa gli accessi simbolici
Nel 2000 Microsoft svela una nuova
tecnologia basata sul vasto mondo del
WWW. Questa tecnologia, anch’essa basata
sulla macchina astratta a stack, diventa nota
come .NET System
8
Introduzione JVM




Macchina astratta su cui vengono eseguite le
istruzioni del linguaggio Java
Bytecode
Basata su uno stack
Il suo compito è quello di interpretare un
particolare formato di file, class file format
9
JVM
Class file format
Bytecode
Tavola dei
simboli
Altre
informazioni
Class file format
10
Tipi di dato
Primitivi
Numerici
Di riferimento
Di ritorno
Classi
Interfacce
Vettori
11
Elenco dei tipi numerici

byte: valori con segno, su 8 bit, in complemento a 2
short: valori con segno, su 16 bit, in complemento a 2

int: valori con segno, su 32 bit, in complemento a 2

long: valori con segno, su 64 bit, in complemento a 2

char: valori senza segno, su 16 bit, in conformità allo standard Unicode
versione 1.1.5

I tipi numerici in virgola mobile sono:

float: valori in singola precisione, su 32 bit

double: valori in doppia precisione, su 64 bit
12

Memorizzazione dei valori: nozione astratta
di “parola”

Le dimensioni delle aree di memoria della
JVM sono definiti in termini di parole e non di
numero effettivo di bit
13
Area metodi
Aree dati
Classe1
pc
Classe2
Op stack
Frame
corrente
Var locali
Heap
Java stack
oggetti
vettori
Thread
14
Program counter

Contiene l’indirizzo dell’istruzione in
esecuzione

Unico per ogni thread

Il registro PC ha le dimensioni di una parola
15
Stack

Ogni thread ha uno stack privato, creato
insieme al thread

Contiene i frame

Mantiene le variabili locali e i risultati parziali

Dimensioni fissi e variabili dinamicamente
16
Heap




Area di memoria condivisa fra tutti i thread
Vi sono allocati oggetti e vettori
Creato con l’attivazione della JVM ed è
gestito dal garbage collector
Dimensione fissa o
dinamica(espanso/contratto)
17
Area dei metodi




Condivisa fra tutti i thread
Contiene le strutture associate ad ogni
classe(constant pool, dati dei campi e dei
metodi)
Creata con l’attivazione della JVM
Dimensione fissa o
dinamica(espanso/contratto)
18
Constant pool



Rappresentazione runtime della tavola
constant_pool
Contiene diversi tipi di costanti
Al caricamento di una classe o di
un’interfaccia la JVM crea la corrispondente
constant_pool
19
Frame





Memorizzazione dei dati e dei risultati parziali
Dynamic linking
Per ogni metodo invocato viene creato un
frame
Viene chiamato frame corrente, il frame del
metodo in esecuzione
Il frame è locale al thread che l’ha creato
20
Frame
Vettore di parole
(variabili locali)
Stack degli operandi
Riferimento al tipo di
Metodo corrente
21
Frame



Ogni frame ospita un vettore di parole
contenente i valori delle variabili locali
Le istruzioni della JVM estraggono i valori su
cui operare dallo stack delgli operandi del
frame corrente
Ogni frame contiene un riferimento al tipo del
metodo corrente nel constant pool (supporto
del Dynamic Linking)
22
Esecuzione



La JVM invoca il metodo main della classe
specificata
La classe a questo punto viene
1)Caricata
2)Linkata
3)Inizializzata
Il metodo main deve essere dichiarato
public, static, void
23
Esecuzione
Caricamento
Linking
Forma binaria
oggetto
Inizializzione
Esecuzione degli
Inizializzatori statici
Forma binaria
Combinazione
con lo stato
corrente
della JVM
24
Caricamento

La JVM tenterà di eseguire il metodo main

Visto che la classe non è stata ancora
caricata la JVM utilizza il ClassLoader per
trovare la rappresentazione binaria della
classe
25
Linking




Il processo di linking include: verifica, preparazione
e risoluzione
Verifica: controlla che la rappresentazione della
classe sia conforme alle specifiche, e che il
bytecode sia conforme alle regole semantiche della
JVM.
Preparazione: alloca le strutture dati, ad esempio le
tavole dei metodi,e crea e inizializza i campi statici
di una classe ai valori di default
Risoluzione: controlla che riferimenti simbolici ad
altre classi ed interfacce siano corretti.
26
Inizializzazione



Esecuzione di tutti gli inizializzatori della
classe
Se la classe possiede una superclasse a sua
volta deve essere caricata, linkata e
inizializzata
Nel caso la classe implementi un’interfaccia
questa non deve essere inizializzata
27
Insieme delle istruzioni
In esecuzione l’accesso al constant pool per
risolvere i riferimenti è oneroso.
Ottimizzazione: istruzioni veloci (quick).
28
Scarica

ppt - DISI