2015-05-12 28 views
5

Quando abbiamo una variabile di riferimento, ad es. per semplificare l'operazione, Integer i, possiamo supporre che la dimensione di i sia di circa 16 byte di overhead + 4 byte per l'effettivo int + 4 byte di padding, cioè 24 byte.
Quindi la mia domanda è se i è null ci sono solo 4 byte del riferimento che non puntano da nessuna parte o ci sono altre informazioni "nascoste" aggiuntive che aggiungono a questo?Quanti byte un oggetto nullo?

+0

Vuoi dire l'oggetto, o il riferimento? – yshavit

+0

corretto. Abbiamo solo 4 byte del riferimento che puntano a null. –

risposta

2

Se ricordo correttamente, la specifica JVM indica che non è necessario che null abbia un valore o una rappresentazione specifici, quindi potrebbe essere qualsiasi cosa. Che cosa è in genere è, non lo so, ma una probabile ipotesi è probabilmente 32 o 64 bit di zeri, a seconda della versione JVM.

Edit: Ecco la sezione pertinente: http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.4

La specifica Java Virtual Machine non mandato concreto nulla codifica valore.

Cheers,

1

Si utilizza ancora la memoria. Utilizza 4 byte per un 32 bit e 8 per un 64 credo.

trovato maggiori informazioni su questo: Java - Does null variable require space in memory

+1

Se si imposta un riferimento a 'null', non punta a un oggetto sull'heap (che consuma memoria heap). Tuttavia, il riferimento stesso deve essere memorizzato. Come un campo in un oggetto o uno slot nel frame dello stack locale (se è una variabile locale). E questo ovviamente occupa tanti byte quante sono le dimensioni del "puntatore di oggetti ordinari" (cioè 32 o 64 bit). In Oggetti potrebbero esserci dei padding nei campi e negli stack c'è qualche riutilizzo (o in caso di ricorsione di più occorrenze dello stesso riferimento). Ma questo è tutto indipendente dal valore reale del riferimento (null o no). – eckes

Problemi correlati