giovedì 25 agosto 2011

Java errore java.lang.OutOfMemoryError

L'errore java.lang.OutOfMemoryError si verifica quando il processo java in esecuzione arriva a saturare la memoria disponibile.
Per aumentare la memoria bisogna far partire il programma specificando memoria minima e massima allocata.
La sintassi è questa:

java -Xms512M -Xmx1024M [NOME_CLASSE_CON_MAIN]

In questo modo allochiamo minimo 512 MB e massimo 1024MB.
Da ricordare che :

  1. Bisogna specificare il parametro m dopo il numero di Mega altrimenti li intende come bytes (e si rischia di andare in overflow anche con semplici programmi);
  2. Il valore numerico deve essere attaccato all'ammontare di Mega specificato (es è errato scrivere java -Xms 512);
  3. Di default il massimo valore dell'heap size è bassino, 64 Mega, occhio che se si specifica solo il valore minimo mettendo un valore superiore al massimo il programma non parte;
  4. Scriver m o M è analogo, è errato scrivere invece mb;
  5. Per allocare direttamente in giga scrivere g (es java -Xms1g -Xmx2g ). Non è possibile allocare più memoria di quella fisicamente disponibile, il messaggio indicato è could not reserve enough space for object heap;
  6. Si devono specificare valori interi, quindi se si vuole dedicare 1,5 gigabytes è scorretto scrivere  1.5g ma bisogna scrivere 1536M.
 Per alzare il valore su Jboss editare il file $JBOSS_HOME/bin/run.conf ricercando JAVA_OPTS e scrivendo qualcosa del tipo
JAVA_OPTS="-server -Xms128m -Xmx128m"
 


Nessun commento:

Posta un commento