2015-05-16 11 views
10

Durante la dichiarazione di un array in java, è necessario allocare dinamicamente la memoria utilizzando una nuova parola chiave.Inizializzazione dell'array Java con dimensione zero

class array 
{ 
    public static void main(String ars[]) { 
    int A[] = new int[10]; 
    System.out.println(A.length); 
    } 
} 

Sopra il codice verrà creato un array 1D contenente 10 elementi, 4 byte ciascuno. e l'output sarà 10. Ma quando si esegue lo stesso codice come segue:

class array { 
    public static void main(String ars[]) { 
    int A[] = new int[0]; 
    System.out.println(A.length); 
    } 
} 

uscita è 0. Voglio sapere che quando si scrive new int[0] poi fare Java allocare una certa memoria per la matrice o no? Se sì, quanto?

risposta

10

Sì, assegna un po 'di memoria, ma la quantità varia a seconda dell'implementazione JVM. È necessario rappresentare in qualche modo:

  1. Un puntatore unico (! In modo che la matrice è = ogni altra new int [0]), così almeno 1 byte
  2. puntatore di classe (per Object.getClass())
  3. codice hash (per System.identityHashCode)
  4. monitoraggio oggetto (per sincronizzato (Object))
  5. lunghezza Array

La JVM può eseguire varie ottimizzazioni (t derivano Il codice hash del sistema dal puntatore dell'oggetto se non è stato GC/riposizionato, usa un singolo bit per rappresentare un oggetto non bloccato, usa un singolo bit per rappresentare un array vuoto, ecc.), ma ha ancora allocare un po 'di memoria.

Modifica: Ad esempio, seguendo i passaggi su this post, la mia JVM riporta una dimensione di 16 per new int[0] contro 32 per new int[4].

Problemi correlati