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.