2. La macchina virtuale Java
Per come è stata progettata la macchina Java, essa possiede dei limiti. Essi sono i seguenti.
- I puntatori alla memoria e lo stack entrambi a 32 bit limitano a 4 Gbytes la memoria indirizzabile.
- Gli argomenti a 16 bit con segno delle istruzioni jump limitano a 32 Kbytes la massima dimensione
di un metodo.
- Per ogni frame dello stack il massimo numero di variabili locali è di 256 (infatti gli indici alle
variabili locali sono numeri a 8 bit senza segno).
- Il numero delle costanti nel costant pool può essere al massimo 32768 (infatti gli indici alle costanti
nel costant pool sono numeri a 16 bit con segno).
Inoltre, per quelle istruzioni della macchina Java che permettono l'accesso rapido (_quick
instructions), vi sono ulteriori limiti:
- il numero massimo di metodi in una classe è 256 (se si usa per esempio l'istruzione
invokemethod_quick);
- il massimo numero di parametri che un metodo può chiamare è 256. Ogni parametro è lungo 32
bit, per cui parametri a 64 bit occupano due posizioni a 32 bit.
Un programma in codice macchina Java può essere eseguito trasformando, attraverso un apposito
compilatore, il codice Java in codice macchina reale per una determinata macchina. Come già detto,
attualmente è disponibile solo l'interprete del codice macchina Java. Esso provvede a leggere il
codice macchina Java (bytecodes) sequenzialmente e ad attuare, passo per passo, le istruzioni
macchina. Essenzialmente, l'interprete Java compie le seguenti azioni:
do {
prendi (fetch) un byte;
esegui l'istruzione specificata dal byte caricato;
} while(c'è qualcosa da fare);