| 	
	
	
		
		|||||||
  | 
		
| 
 | 
![]()  | 
	
	
| 
		 | 
	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: 05:45.









		
		
		

			
 
 







