2. La macchina virtuale Java


2.5 Lo heap

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.

2.6 L'area dei metodi

L'area dei metodi è una parte di memoria riservata alla allocazione del codice compilato Java appartenente ai vari metodi.

2.7 Il costant pool (insieme delle costanti relativa ad una classe)

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.