Oppure

Loading
07/02/07 8:58
Reese
E' vero che la dimensione massima di un array e' 65535?
aaa
07/02/07 21:02
privi87
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
public class Array {

    public static void main(String[] args) {
    
    int[] array = new int[100000];
    for (int num = 0; num < array.length; num++) {
    array[num] = num;
    System.out.println(array[num]);
	 }
	 System.exit(0);
	}
}

Ciaooo!

P.S.
Può darsi stia sbagliando eh... :-|
Ultima modifica effettuata da privi87 07/02/07 21:23
aaa
11/02/07 11:42
netarrow
Il limite è il limite del range degli interi, quindi:
int prova[] = new int[2147483647]; è il massimo

compilando questo:

public class test {

public static void main(String[] args) {

test b = new test();

b.a();

}

public void a() {
int prova[] = new int[2147483647];
}

}


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

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


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:

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 11/02/07 11:52
aaa