2. La macchina virtuale Java
Lo heap è quella parte di memoria riservata ad accogliere gli oggetti, ovvero le istanze delle classi. Il
linguaggio Java non dà al programmatore la possibilità di disallocare gli oggetti. E' compito del
compilatore Java provvedere a generare un codice in grado di liberare lo heap dagli oggetti che non
sono più usati (automatic garbage collection). Da notare che la macchina Java di per sé non
implementa alcun algoritmo per lo svolgimento dello automatic garbage collection. Quest'ultima
operazione è caratteristica dunque del linguaggio Java, non della macchina virtuale sulla quale esso si
appoggia. E' possibile dunque riscrivere un nuovo compilatore che provvede a generare algoritmi di
qualunque tipo per implementare lo automatic garbage collection. Al limite, si può anche progettare
un nuovo linguaggio di programmazione basato sulla macchina Java che non preveda la disallocazione
automatica dello heap, bensì quella manuale (come nel C++).
Le operazioni sugli oggetti sono sempre ottenute indirettamente con appositi handles.
L'area dei metodi è una parte di memoria riservata alla allocazione del codice compilato Java
appartenente ai vari metodi.
Ogni classe possiede un insieme di parametri costanti (costant pool). Questi parametri contengono i
nomi dei campi, dei metodi e altre informazioni a cui attingono tutti i metodi della classe. Quando
viene caricata in memoria, la struttura di ogni classe possiede due campi destinati a contenere le
informazioni relative al costant pool della stessa classe. Il primo di questi due campi indica il numero
delle costanti contenute nel costant pool, il secondo contiene un numero intero che rappresenta
l'offset di memoria a cui si trova il costant pool a partire dalla posizione di memoria da cui inizia la
classe.