Esiste un limite al numero di elementi che un array Java può contenere? Se è così, che cosa è?
Esiste un limite al numero di elementi che un array Java può contenere? Se è così, che cosa è?
Risposte:
Non ho visto la risposta giusta, anche se è molto facile testare.
In una recente macchina virtuale HotSpot, la risposta corretta è Integer.MAX_VALUE - 5. Una volta superato questo:
public class Foo {
public static void main(String[] args) {
Object[] array = new Object[Integer.MAX_VALUE - 4];
}
}
Ottieni:
Exception in thread "main" java.lang.OutOfMemoryError:
Requested array size exceeds VM limit
MAX_VALUE-2elementi. Questo è indipendente da ciò che allocare e mi chiedo davvero per cosa la VM possa usare le due "cose" (la lunghezza non si adatta a 2 byte).
Integer.MAX_VALUE+1, avrai un overflow intero. Le dimensioni dell'array in Java intnon lo sono long; indipendentemente dal tipo di dati archiviato nell'array, nei byte o nei riferimenti. Le stringhe sono solo riferimenti a oggetti.
Integer.MAX_VALUE - 2= 2 147 483 645. Java se alloca correttamente tale array se lo si esegue -Xmx13G. Fallisce OutOfMemoryError: Java heap spacese passi -Xmx12G.