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-2
elementi. 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 int
non 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 space
se passi -Xmx12G
.