CS6270 Virtual Machines - Java Virtual Machine Architecture and APIs
Java Virtual Machine
description
Transcript of Java Virtual Machine
1
Java Virtual Machine
Massa Laura
Mela Enrica
2
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.
3
Situazione idealeFront-end
indipendente dall’hardware
Back-endindipendente dal linguaggio del
SOURCE CODE
4
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)
5
Programma codificato per una macchina astratta
Codice eseguibile(dipende dall’architettura)
compilatore
Emula la macchine astratta
interprete
lento Codice più denso
6
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.
7
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
8
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
9
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
10
JVMClass file format
Bytecode
Tavola dei simboli
Altre informazioni
Class file format
11
Tipi di dato
Primitivi Di riferimento
Numerici
Di ritorno
Classi Interfacce
Vettori
12
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
13
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
14
Aree dati
pc
Var locali
Op stack
Frame corrente
Thread
Java stack
Area metodi
Classe1
Classe2
Metodo
corrente
Heap
oggetti
vettori
15
Program counter
Contiene l’indirizzo dell’istruzione in esecuzione
Unico per ogni thread
Il registro PC ha le dimensioni di una parola
16
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
17
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)
18
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)
19
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
20
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
21
Vettore di parole(variabili locali)
Stack degli operandi
Frame
Riferimento al tipo di Metodo corrente
22
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)
23
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
24
Esecuzione
Forma binariaoggetto
Caricamento
Forma binariaCombinazionecon lo stato
corrente della JVM
Linking
Inizializzione
Esecuzione degli Inizializzatori statici
25
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
26
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.
27
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
28
Insieme delle istruzioni
In esecuzione l’accesso al constant pool per risolvere i riferimenti è oneroso.
Ottimizzazione: istruzioni veloci (quick).