PDA

View Full Version : [JAVA] Problema: aumentare heap space


AeM
15-07-2011, 15:33
Ciao a tutti,
lavoro su win 7 con eclipse 3.7. Sto sviluppando un programma di gestione aziendale che mi si blocca per questo errore: java.lang.OutOfMemoryError: Java heap space. Ho cercato in giro su internet ma non riesco a capire come poter aumentare la dimensione disponibile per la Virtual Machine. Presumo il problema sia solo questo, la dimensione della VM. Nessuno ha mai riscontrato questo caso? Avrei bisogno di una mano :help:
Grazie a tutti

banryu79
15-07-2011, 16:38
Ci sono due parametri appositi che puoi passare al comando java per configurare l'heap size.

...
-Xmsn
Specify the initial size, in bytes, of the memory allocation pool. This value must be a multiple of 1024 greater than 1MB. Append the letter k or K to indicate kilobytes, or m or M to indicate megabytes. The default value is 2MB. Examples:

-Xms6291456
-Xms6144k
-Xms6m


-Xmxn
Specify the maximum size, in bytes, of the memory allocation pool. This value must a multiple of 1024 greater than 2MB. Append the letter k or K to indicate kilobytes, or m or M to indicate megabytes. The default value is 64MB. Examples:

-Xmx83886080
-Xmx81920k
-Xmx80m

AeM
15-07-2011, 16:43
ok grazie, è proprio questo il mio dubbio: dove devo inserire i comandi? dal prompt? ci ho provato ma non mi apre la classe... potresti farmi un esempio per favore?

GByTe87
15-07-2011, 17:02
http://dinu.blog.com/2010/06/02/out-of-memory/

;)

AeM
15-07-2011, 17:18
Grazie ma non è servito, già lo avevo provato purtoppo. Ho anche modificato il file eclipse.ini e cambiato direttamente li la massima dimensione ma ho sempre lo stesso errore. Non so proprio come rimediare :help:

WarDuck
15-07-2011, 17:51
Ma siamo sicuri che questo errore non sia sintomo di qualche errore nel programma?

AeM
15-07-2011, 17:55
Sono sicuro che il programma è corretto, in quanto l'errore di memoria terminata accade in diversi punti del programma, cioè a seconda di quante operazioni ho fatto può apparire prima o dopo, non in punto preciso, altrimenti avrei trovato l'errore. Putroppo il programma è molto pesante, è vero, ma corretto. Cosa posso fare?

shinya
15-07-2011, 18:06
Sono sicuro che il programma è corretto, in quanto l'errore di memoria terminata accade in diversi punti del programma, cioè a seconda di quante operazioni ho fatto può apparire prima o dopo, non in punto preciso...
Questo non mi sembra indice di alcunché.... :mbe:
Comunque puoi attaccare visualvm (googla qualcosa tipo "detect memory leak with visualvm") al processo, tracciare tutto (con relativo overhead a spruzzo) e vedere se le "surviving generations" crescono in continuazione (probabile memory leak) e quali sono le classi che occupano più memoria.

Come le imposti le opzioni per la vm per dimensionare lo spazio di heap? (fai uno screenshot al massimo se fai tutto da eclipse e non a riga di comando...)

AeM
15-07-2011, 18:40
Proverò VisualVM e riferirò, comunque non avendo mai avuto problemi di questo genere non ho mai settato la VM, gli unici parametri che ho messo sono stati gli stessi suggeriti qui nella discussione.
Il programma in se funziona, lo stiamo sviluppando e funzionava bene. E' stata aggiunta una classe ultimamente ma molto semplice, controllata e ricontrollata e da quel momento da l'errore di heap space. Ma questa classe non modifica in nulla il programma! Ho impostato solamente il massimo spazio, 1024MB che penso bastino. Avevo fatto delle prove con un valore maggiore ma il compilatore non era in grado di creare la VM.
Vorrei comunque ringraziare tutti per l'aiuto! :D
Appena possibile metterò i risultati di VisualVM.

AeM
16-07-2011, 11:28
Allora, non ho avuto bene il tempo di capire come usare visualVM, però sono riuscito a collegarlo ad eclipse e ad analizzare la memoria mentre facevo girare il programma. Il grafico dell'heap space mi segna come dimensione massima 66MB e il problema arriva quando il programma calcola i dati immessi, dove sfioro i 600-700MB e poi si attesta sui 500, ovviamente sforando il tetto dei 66. Quindi mi sorge il dubbio che non sono riuscito a impostare la massima dimensione dell'heap space, eppure ho seguito le guide... Qualcuno potrebbe spiegarmi cosa fare?:help:

franksisca
16-07-2011, 12:05
per me più che un errore sull'heap è un errore sulla gestione dei dati.

cmq per cambiarlo in eclipse io modificavo i file:

eclipse.ini: la memoria per il VM in esecuzione Eclipse

impostazione jre: la memoria per eseguire programmi Java da Eclipse

catalina.sh: la memoria per il server Tomcat


controllati bene la gestione dei dati...

AeM
17-07-2011, 10:28
impostazione jre: la memoria per eseguire programmi Java da Eclipse

catalina.sh: la memoria per il server Tomcat



Ora va!! Grazie mille, finalmente sono riuscito ad aumentare questo heap space! :cool: