Innanzitutto ti ringrazio per la risposta,

per quanto riguarda la capacità effettiva e quella attuale sono ovviamente d'accordo: immagino che ArrayList utilizzi una strategia simile a quella del raddoppio per mantenere una complessità costante su n inserimenti, ed in effetti utilizzando:

codice:
List<Integer> 
L = new ArrayList<Integer>(10000000); 		 		
for(int i=0;i<10000000;i++) 			
L.add(i);
quindi allocando esattamente i 10 milioni di interi le cose "migliorano" se così si può dire (340mb!).
Anche considerando che ArrayList usa un array di riferimenti ad oggetti a me non sembra assolutamente normale che per ogni intero inserito si paghi 10 volte il costo dell'intero stesso...esiste qualche struttura dati più efficiente in tal senso ? O qualcuno ha qualche idea su come posso risolvere il problema ? Ripeto, mi servirebbe una struttura dati che scali in maniera ottima su una mole di dati (principalmente interi) nell'ordine delle centinaia di milioni