Le matrici Java hanno una dimensione massima?


214

Esiste un limite al numero di elementi che un array Java può contenere? Se è così, che cosa è?


5
Hai accettato una risposta sbagliata, prova solo ad allocare un array così lungo (e no, non sto esaurendo la memoria).
maaartinus,


Risposte:


184

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

57
Penso che l'idea dei downvotes non abbia senso a meno che non siamo disposti a ridimensionare le risposte che sono chiare e semplicemente sbagliate . La differenza di cinque byte ha davvero importanza nel mondo reale, NO, ovviamente no. Ma mi preoccupa il fatto che le persone siano disposte a dare una risposta "autorevole" senza nemmeno provarla per vedere se funziona davvero. Per quanto riguarda il limite di memoria, beh, DUH. È come se mi chiedessi "quante uve puoi mangiare?" e ho detto "beh, dipende da quanti ne ho al momento in frigorifero".
Kevin Bourrillion,

7
Sai per caso perché non ti darà quei cinque byte? È necessariamente qualcosa che succede sempre in Java o potrebbe essere semplicemente correlato alla memoria del tuo computer o qualcosa del genere?
Taymon

17
@Kevin Bourrillion: questo sembra essere cambiato, usando Oracle 1.7.0_07 posso allocare fino a 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).
maaartinus,

3
@ TomášZato l'ultimo 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.
Ha QUIT - Anony-Mousse

8
Il numero massimo di elementi in un array in JDK 6 e versioni successive è 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.
Alexey Ivanov,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.