Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Dimensione array
Forum - Java - Dimensione array

Avatar
Reese (Ex-Member)
Pro


Messaggi: 179
Iscritto: 09/08/2006

Segnala al moderatore
Postato alle 9:58
Mercoledì, 07/02/2007
E' vero che la dimensione massima di un array e' 65535?

PM Quote
Avatar
privi87 (Normal User)
Rookie


Messaggi: 30
Iscritto: 03/02/2007

Segnala al moderatore
Postato alle 22:02
Mercoledì, 07/02/2007
Sono quasi sicuro di poter dire di no, mi corregga qualcuno se sbaglio, non ho mai letto una cosa del genere e cmq se provi a eseguire queste righe di codice te ne accorgi tu stesso che l'array contiene un numero d'oggetti nettamente maggiore dal valore limite che avevi menzionato
Codice sorgente - presumibilmente Java

  1. public class Array {
  2.  
  3.     public static void main(String[] args) {
  4.    
  5.     int[] array = new int[100000];
  6.     for (int num = 0; num < array.length; num++) {
  7.     array[num] = num;
  8.     System.out.println(array[num]);
  9.          }
  10.          System.exit(0);
  11.         }
  12. }


Ciaooo!

P.S.
Può darsi stia sbagliando eh... :-|

Ultima modifica effettuata da privi87 il 07/02/2007 alle 22:23
PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 12:42
Domenica, 11/02/2007
Il limite è il limite del range degli interi, quindi:
int prova[] = new int[2147483647]; è il massimo

compilando questo:

Codice sorgente - presumibilmente Java

  1. public class test {
  2.  
  3. public static void main(String[] args) {
  4.  
  5. test b = new test();
  6.  
  7. b.a();
  8.  
  9. }
  10.  
  11. public void a() {
  12. int prova[] = new int[2147483647];
  13. }
  14.  
  15. }



nessun errore a compile time, ma se usi 2147483648 (aumentando solo di uno) da:

Codice sorgente - presumibilmente Java

  1. test.java:12: integer number too large: 2147483648
  2. int prova[] = new int[2147483648];
  3.                       ^



Poi quando esegui la memoria virtuale della JVM è quella che è, infatti nel momento in cui l'esecuzione arriva nel punti in cui bisogna allocare quel vettore da:

Codice sorgente - presumibilmente Java

  1. Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit



In linguaggi come C++ i vettori sono limitati solo quando li allochi dentro una funzione (quindi non globali) e per valore (senza new) perchè vengono messi nello stack che molto probabilmente non ha lo spazio necessario, se si allocano globalmente o utilizzando new vengono messi nello heap che, se non sbaglio, ha tutta la ram a disposizione.

Tenendo conto però che Java non ha ne variabili globali ne allocazione per valore dei vettori tutto va nello heap, ma essendo nterpretato, è facile che la JVM non usi il vero heap del sistema ma una sua virtualizzazione limitata, infatti c'è un argomento da passare al comando java che imposta le sue dimensioni.

Cmq cercando su internet avevo trovato chi aveva problemi con 65536 elementi, vettori e cose simili, ma forse era una situazione diversa o erano vecchie versioni di java, io ho provato con  1.5.09.
Cmq come ripesco la pagina la posto che è interessante ;-)

Ultima modifica effettuata da netarrow il 11/02/2007 alle 12:52
PM Quote