3.2 STRUTTURE DATI INTERNE ED AREE DI RUNTIME
Introduzione ai tipi di dati della Java virtual Machine
La Java Virtual machine lavora eseguendo le operazioni su certi tipi di dati strettamente definiti insieme alle operazioni dalla sua specifica.
I tipi di dati si dividono in tipi primitivi e tipi reference. Variabili di tipo primitivo contengono valori primitivi e variabili di tipo reference valori riferimento. I valori reference si riferiscono ad oggetti ma non sono oggetti essi stessi. I valori primitivi, invece, sono dei dati veri e propri.
Figura 3.2-1. Tipi di dati della Java virtual machine.
I range dei tipi di dati della Java virtual machines sono mostrati in Tabella 3-1.
Type |
Range |
Byte |
8-bit signed two's complement integer (-27 to 27 - 1, inclusive) |
Short |
16-bit signed two's complement integer (-215 to 215 - 1, inclusive) |
Int |
32-bit signed two's complement integer (-231 to 231 - 1, inclusive) |
Long |
64-bit signed two's complement integer (-263 to 263 - 1, inclusive) |
Char |
16-bit unsigned Unicode character (0 to 216 - 1, inclusive) |
Float |
32-bit IEEE 754 single-precision float |
Double |
64-bit IEEE 754 double-precision float |
ReturnAddress |
address of an opcode within the same method |
Reference |
reference to an object on the heap, or null |
Tabella 3-1. Ranges dei tipi della Java virtual machine
Tutti i tipi primitivi del linguaggio Java sono i tipi primitivi della JVM.
Sebbene boolean è qualificato quale tipo primitivo per la JVM, il set di istruzioni ha un supporto limitato per essi: 'falso' è rappresentato dall'intero zero e 'vero' da qualsiasi intero non-zero. Operazioni che coivolgono i valori booleani usano gli interi. Gli array di booleani vengono utilizzati come array di byte.
I tipi numerici si distinguono in : byte, short, int, long, char ed i tipi floating- point: float e double.
Questi hanno lo stesso range ovunque.
Esempio un long della JVM agisce sempre come un numero a 64-bit con segno in complemento a due, indipendentemente dalla piattaforma sottostante.
La JVM lavora con un altro tipo primitivo che non è disponibile nel linguaggio Java ed è il tipo returnAddress, utilizzato per implementare la clausola finally dei programmi Java.
Il tipo reference della JVM come visto si distingue in tre tipi: classe, interfaccia e array. Tutti e tre hanno valori che sono riferimenti ad oggetti creati dinamicamente, oppure null.
Taglia delle parole
L'unità base di misura per i dati nella JAVA VIRTUAL MACHINE è la parola di memoria. La grandezza della parola deve essere grande abbastanza per memorizzare uno dei valori di tipo byte, short, int, char, float, returnAddress o reference. Due parole invece devono contenere i long ed i double.
Due sezioni del frame dello stack-- "variabili locali" e "operando" -- sono definite in termini di parola. Queste aree possono contenere valori di ciascuno dei tipi di dati della JVM. Quando è posto nelle variabili locali o nell'operando, un valore occupa una o due parole.
Quando vengono eseguiti, i programmi Java non possono determinare la taglia della parola della JVM implementata sul proprio host.