|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2002
Città: Monza
Messaggi: 598
|
[java] Dimensioni massime Vector - ArrayList
ciao amici
ho realizzato un'applicazione che utilizza un Vector per memorizzare degli EditorPane ma mi sono accorto, ad un certo punto, che non mi basta la memoria, quindi dovrei cambiare struttura. Conosco List con ArrayList introdotto con java 5, ma in qeusto caso nn so se avrò gli stessi problemi (e a dire il vero non so se posso restringere il campo alla sola java 5...) ArrayList ha una dimensione massima oltre cui non si può andare? In alternativa cosa potrei usare? Scusate per la domanda un pò troppo sempliciotta, ma su google nn ho trovato chiari riscontri. a presto
__________________
Nunc est bibendum |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
|
Quote:
Direi che,teoricamente, puoi riempire una collection che accede ai suoi elementi con un indice di tipo int fino a Integer.MAX_VALUE
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer °SetiEmperor°| Ninja Technologies { qualunque cosa sia, è veloce e fa male (cit.) } |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2001
Città: Alessandria (provincia)
Messaggi: 4772
|
Prova a lanciare l'applicazione "allargando" la memoria disponibile invocando l'applicazione con qualcosa del tipo
java -Xms256m -Xmx400m tuoPackage.tuaApplicazione |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Sep 2002
Città: Monza
Messaggi: 598
|
usando vector, mi pare che mi sia fermato a 4096 elementi, ma potrei sbagliarmi.
per il fatto dell'arraylist mi riferivo al fatto che usando: List<Oggetto> lista= new ArrayList<Oggetto>(); mi richiede la 1.5 Ma se "allargo" lo spazio poi su un altro computer cosa succede? grazie
__________________
Nunc est bibendum |
|
|
|
|
|
#5 |
|
Messaggi: n/a
|
dipende se la classe usa un array e non delle catene di oggetti: se usa un array allora la massima dimensione è Integer.MAX_VALUE, se usa una catena di oggetti (o dfelle catene di oggetti attaccate ad un array, come la HashMap) la dimensione massima non si sà, sipende da quanta memoria della VM c'è.
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Nel linguaggio di programmazione Java la dimensione massima di un ArrayList è il valore positivo massimo di un int.
Sulla piattaforma c'è il limite delle dimensioni dell'heap, che espandi con l'opzione di cui è già stato detto. Naturalmente devi includere tra i parametri d'avvio della jvm l'espansione per tutti coloro che eseguiranno l'applicazione altrimenti incorrerai nell'esaurimento della memoria disponibile. Come dipende dalla forma con cui distribuisci l'applicazione. Java Web Start ha il suo metodo (un parametro ad hoc nel descrittore jnlp), per le applicazione stand-alone puoi usare uno script di avvio, per le applet...o il client interviene a manina sulla configurazione o ciccia. C'è poi anche una curiosità di cui non sono riuscito a trovare documentazione. Apparentemente la JVM incorpora un limite ulteriore alla semplice dimensione della memoria disponibile. Sul mio PC se provo a far creare alla JVM un array (ArrayList usa un array) di lunghezza Integer.MAX_VALUE la jvm non dice "OutOfMemoryError: heap space" ma "OutOfMemoryError: requested array size exceeds VM limits". Non avendo trovato riferimenti al riguaro ho fatto un paio di prove e sembra che la JVM rilasci due specie di "OutOfMemory" diversi a seconda che si superi o no una certa soglia. Uno è il limite dell'heap, che controlli con l'opzione -Xmx, l'altro è questo fantomatico "VM limit", insensibile all'Xmx. Mistero? |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
|
Quote:
Prova a scrivere: List lista = new ArrayList();
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer °SetiEmperor°| Ninja Technologies { qualunque cosa sia, è veloce e fa male (cit.) } |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
http://java.sun.com/docs/hotspot/gc5...ions%7Coutline non ho avuto il tempo di leggere tutto, ma a quanto ho capito è un problema del garbage collector che non riesce a deallocare correttamente la memoria...
__________________
|
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
|
Quote:
Comunque bisogna fare attenzione: quanta memoria occupa un riferimento? Supponendo che occupi 32 bit, con un'istruzione del tipo: Object[] array = new Object[Integer.MAX_VALUE] si richiederebbe alla JVM di allocare uno spazio di memoria di almeno Integer.MAX_VALUE * 32 bit.
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer °SetiEmperor°| Ninja Technologies { qualunque cosa sia, è veloce e fa male (cit.) } |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Verissimo, Angus hai ragione: baco del tigrotto.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:26.



















