Qual è la dimensione di una variabile di riferimento in java. Può essere calcolato?

3

Poiché i puntatori in C richiedono 2 byte di dimensioni della memoria indipendentemente dalla dimensione del tipo di dati che puntano. Quindi la stessa cosa vale anche per i riferimenti java?

    
posta Kushagra Thapar 23.08.2013 - 11:22
fonte

2 risposte

5

La specifica del linguaggio Java non dice nulla su quanto è grande un riferimento in memoria. Il JLS non dice nemmeno che un riferimento deve esistere in fase di esecuzione a tutti . Il compilatore è libero di usare 42 gigabyte come riferimento o di eliminarlo completamente, rendendo la dimensione 0 byte. (In effetti, la mai specifica del linguaggio Java dice qualcosa su una particolare strategia o rappresentazione di implementazione, specifica solo la sintassi e la semantica dei costrutti del linguaggio Java, non la loro pragmatica.)

La maggior parte delle tipiche implementazioni Java implementeranno semplicemente riferimenti come puntatori, rendendoli così della stessa dimensione di C. Talvolta, questi riferimenti sono indicati come OOP (puntatori di oggetti ordinari). Ma Oracle Hotspot JVM, ad esempio, ha una funzionalità chiamata CompressedOOPs, che può rendere alcuni riferimenti più piccoli dei puntatori C su sistemi a 64 bit.

    
risposta data 24.08.2013 - 04:50
fonte
1

A causa di -XX:+UseCompressedOops opzione HotSpot JVM , riferimenti a oggetti sono 8 byte.

Enables the use of compressed pointers (object references represented as 32 bit offsets instead of 64-bit pointers) for optimized 64-bit performance with Java heap sizes less than 32gb.

Possiamo testare questo aggiungendo un riferimento a una classe vuota e misurandone l'utilizzo della memoria. Questo mostra 24 byte usati nell'heap. Aggiungi un'altra primitiva "byte", misura ancora e vedrai 32 byte di utilizzo dell'heap.

    
risposta data 02.09.2013 - 16:03
fonte

Leggi altre domande sui tag