Macchina computazionale astratta che esegue programmi Java compilati.
No, legge i bytecode.
S’intende codice Java compilato che, caricato e verificato è in grado di essere eseguito direttamente dall motore esecutivo, che è il cuore della Java Virtual Machine.
Perché non esiste realmente, ma è virtuale nel senso che è realizzata come SW sopra un HW e Sistema Operativo.
Quali sono gli svantaggi/vantaggi della JVM rispetto ad un compilato?
Associato al precompilatore, costituisce una delle due parti principali di un compilatore: il precompilatore genera dal sorgente un modulo oggetto compilato ma interpretabile; sarà l’interprete che lo renderà eseguibile e lo lancierà.
![]() |
Start-up |
![]() |
Loading |
![]() |
Linking:
Verifica |
![]() |
Linking:
Preparazione |
![]() |
Linking:
Risoluzione |
![]() |
Inizializzazione |
![]() |
Creazione di
nuove istanze |
![]() |
Esecuzione |
ClassLoader e
sottoclassi implementano diverse politiche di loading per il recupero
della forma binaria di un oggetto Class (classe/interfaccia) dato un particolare
nome, le principali sono:
– Caching
– Prefetch basato su ipotesi d’impiego
– Gruppo di classi caricate congiuntamente
devono garantire
identico output in caso di errore
–
LinkageError
•
ClassCircularityError
•
ClassFormatError
• NoClassDefFoundError
- JVM termina
quando tutti i thread non deamon terminano
- Invocazione del
metodo exit di Runtime o System ed ok del Security Manager
Possiamo chiamare
runFinalizersOnExit (default = false)
![]() |
PC
register |
![]() |
Heap |
![]() |
Constant
Pool |
![]() |
Area dei metodi |
![]() |
Stack metodi nativi |
dimensione = 1 word
1 PC register per
ogni thread se metodo non nativo il PC register
contiene indirizzo
istruzione in esecuzione
se nativo valore nel PC = indefinito
zona di memoria
non necessariamente contigua condivisa tra thread. Si può definire anche come
Creato allo
start-up e liberato da Garbage Collector.
Dimensione fissa o
variabile dinamicamente, può lanciare OutOfMemoryError.
In JDK 1.02 di Sun dimensione heap puòesser settata allo start-up “-ms” e si può definire la dimensione massima “-mx”.
E’ utilizzata come una “tabella dei simboli” per la rappresentazione del class file per ogni classe ed interfaccia
Allocati
logicamente sulla base dell’organizzazione per-thread dello stack.Memorizzano:
variabili locali
– array o word
– variabili locali indirizzate per indice
stack di operandi
Istruzioni hanno un
tipo
Operano sullo stack
e sulle variabili locali
Non ortogonalità
tra istruzioni e tipi di dati
Tutte le operazioni aritmetiche utilizzano lo stack
Autonomamente
esegue perlustrazione della memoria alla ricerca di oggetti non referenziati
liberando memoria
Elimina alcuni
errori classici di
programmazione
Caratteristica del
linguaggio supportata da JVM
Invisibile al set
di istruzioni
Deve eseguire metodo finalize degli oggetti liberati
Attraverso una verifica che garantisce che
Nessuna forzatura
di riferimento
Oggetti accessibili
esclusivamente secondo il tipo appropriato
Test di parametri
Non avere overflow
di stack
Applica queste
regole secondo due teoremi:
Dato solo il
tipo prima dell’esecuzione dell’istruzione il
Quando esistono
due percorsi di esecuzioni che arrivano al
Stringa che
rappresenta il tipo di un field,metodo o array
es:
double d [ ] [ ] [ ] => [ [ [ D
object mymethod(int i, double d, Thread t)=> (IDLjava/lang/Thread;)Ljava/lang/Object
È il bytecode passato sotto verifica sotto i seguenti check:
1. Check del class
file sintatticamente
2. Check del class
file semanticamente
3. Check del
bytecode
Check Runtime
[ottimizzazione]
Si,
vi sono tre start della Garbage Collection:
-
Sincrono
-
Asincrono
- Esplicito