Ciao a tutti!
Sto facendo girare il mio programma Java con NetBeans.
Il problema è che ad un certo punto mi si è generato questo errore...
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
come posso ovviare?
Ciao a tutti!
Sto facendo girare il mio programma Java con NetBeans.
Il problema è che ad un certo punto mi si è generato questo errore...
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
come posso ovviare?
Probabilmente stai creando troppo oggetti, no?
Puoi aumentare la memoria della VM col parametro -Xmx400m (400 MB così) di java.exe
www.sitemeer.com » Quando un sito pare irraggiungibile
Se ti piace ci puoi trovare anche su Facebook
Dipende da cosa hai fatto di preciso ... se posti qualcosa del codice si può cercare di capire.Originariamente inviato da michela85cancro
Sto facendo girare il mio programma Java con NetBeans.
Il problema è che ad un certo punto mi si è generato questo errore...
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
come posso ovviare?
La dimensione massima del heap si può anche aumentare tramite una opzione non standard ma ... se il tuo codice fa dei giri "viziosi" o gestisce male gli oggetti e la memoria, comunque risulta inefficiente e problematico. Aumentare l'heap può dare un po' di "sollievo" ma se si beve troppa memoria la cosa è da capire/valutare!
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
il mio programma è un'euristica per risolvere un problema NP-hard....
C'è un modo per eliminare gli oggetti che ho creato e che ora non mi servono più? (ho imparato da poco java e da autodidatta...)
Il gc (garbage collector) elimina automaticamente gli oggetti non più "referenziati" (questo è il concetto generale ... poi se si andasse a vedere i dettagli più intricati del gc ci sarebbe altro da dire). Ma se tu tieni referenziati, anche involontariamente, degli oggetti che non usi più .... beh, come vedi il problema resta comunque.Originariamente inviato da michela85cancro
C'è un modo per eliminare gli oggetti che ho creato e che ora non mi servono più?
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
quindi, se ho capito bene, se ho creato alcuni oggetti all'interno di metodi (anche statici?), una volta che il metodo è stato eseguito, tali oggetti non sono più referenziati e quindi non occupano più spazio?
Dipende .... da dove/come sono referenziati.Originariamente inviato da michela85cancro
quindi, se ho capito bene, se ho creato alcuni oggetti all'interno di metodi (anche statici?), una volta che il metodo è stato eseguito, tali oggetti non sono più referenziati e quindi non occupano più spazio?
'i' è una variabile locale al metodo e l'oggetto Integer è referenziato solo da 'i'. Quando il metodo termina, la variabile 'i' sparisce e questo è ovvio e non è evitabile. Se sparisce, l'oggetto non sarà più referenziato, quindi diventa "eleggibile" per il g.c.codice:public void metodo() { Integer i = new Integer(123); }
Se però ad esempio hai fatto:
Dove arrayDiIstanza è un Integer[] tra le variabili di "istanza". Anche quando il metodo termina e 'i' sparisce, l'oggetto Integer è comunque tenuto referenziato dall'array di istanza e solo quando l'oggetto che ha questa variabile di istanza non sarà più referenziato, allora pure l'Integer non lo sarà più.codice:public void metodo() { Integer i = new Integer(123); arrayDiIstanza[2] = i; }
Insomma, un oggetto è "referenziato" se da almeno 1 "live" thread si può tracciare un (qualunque) cammino verso l'oggetto. Se da nessun live thread si può tracciare un cammino all'oggetto, allora non è referenziato.
Il g.c. può anche gestire le cosiddette "island of isolation", due o più oggetti che si referenziano tra di loro ma che non sono "raggiungibili" da alcun thread. In quel caso vanno comunque in pasto al g.c.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
ciao,
dai un occhio a questo mio articolo: http://java.html.it/articoli/leggi/2...i-memory-leak/
Mostra situazioni in cui è possibile creare memory leak, ovvero oggetti in memoria non più utilizzabili ma il cui reference resta attivo
Per il tuo problema: attenzione che il tuo algoritmo euristico potrebbe, di per sé, richiedere troppe risorse rispetto a quelle a disposizione. In quel caso non si tratta tanto di trovare memory leak ma rivedere pesantemente l'algoritmo stesso
Ivan Venuti
Vuoi scaricare alcuni articoli sulla programmazione, pubblicati su riviste di informatica? Visita http://ivenuti.altervista.org/articoli.htm. Se vuoi imparare JavaScript leggi il mio libro: http://www.fag.it/scheda.aspx?ID=21754 !
Grazie a tutti! Ho risolto spostando alcuni pezzi in metodi static....