View Full Version : [Java] java.lang.OutOfMemoryError
Ciao a tutti,
sto scrivendo un programmino java.. l'ho testato con piccoli dataset (100kb)e mi funziona bene. Task manager dice che sono allocati 65 mega di memoria.
In questo caso: il programma funziona correttamente, mi crea il file dei risultati e me lo visualizza.
Poi provo con un dataset di (2,6mega), task manager mi dice che sono allocati 75 mega.
In quest'altro caso invece il programma crea correttamente il file dei risultati ma non me lo visualizza nella textarea apposita. JBuilderX mi da il seguente errore:
java.lang.OutOfMemoryError
A questo punto credo devo riordinare il programma, stando attento a mettere a null gli oggetti che non mi servono più al termine di ogni operazione.
Voi che ne dite?
E' una questione di ordine o è una questione insormontabile di dataset troppo grandi?
Thnks!
probabilmente la seconda.
prova ad aumentare la dimensione massima dello heap, settandolo a metà della memoria fisica che hai sulla macchina. Se hai 512 mega:
java -Xmx256m nome_classe_col_main
che intendi per dataset? e che ci fai? impostare i valori a null può servire ma non è detto che sia questo il problema, se un problema c'è, perchè potrebbe trattarsi effettivamente di struttura dati molto ingombrante e non puoi fare nulla per ridurla, quindi puoi solo aumentare la memoria a disposizione della jvm come ti è stato indicato.
che intendi per dataset? e che ci fai? impostare i valori a null può servire ma non è detto che sia questo il problema, se un problema c'è, perchè potrebbe trattarsi effettivamente di struttura dati molto ingombrante e non puoi fare nulla per ridurla, quindi puoi solo aumentare la memoria a disposizione della jvm come ti è stato indicato.
Ho capito. Per dataset intendo il file che viene letto in input 2,5 mega che viene trasformato in 1500 istanze di oggetto. Ciascun oggetto di circa 300 righe di codice. L'errore logico di programmazione forse sta nel tenere tutti e 1500 oggetti in memoria.
Come si fa a capire quanto spazio in heap occupa ciascuna istanza di una classe?
Sarebbe utile per giostrarmi i diversi compiti. Ad esempio mi creo una classe statica che fa solo i calcoli. Poi creo tante istanze di una classe più piccola, contenete solo la struttura dati, e le do in input una alla volta alla classe statica. La quale appenderà ciascuna volta il risultato in un file.
Dopo aver passato in input l'oggetto lo dealloco e chiamo System.gc()
Potrebbe essere? O L'I/O da file rischia di divenire troppo pesante?
Va bene fare tanti piccoli append, aprendo e chiudendo ogni volta un flusso di scrittura sul file? O queste operazioni sono troppo costose?
Thnks!
Potrebbe essere? O L'I/O da file rischia di divenire troppo pesante?
Va bene fare tanti piccoli append, aprendo e chiudendo ogni volta un flusso di scrittura sul file? O queste operazioni sono troppo costose?
Thnks!
in genere si, almeno usa uno stream bufferizzato.
Tipo BufferedWriter?
PS: ho provato a impostare la heap a 512 mega e fila tutto liscio...
PPS: come si fa a capire quanti mega occupa un singolo oggetto in esecuzione?
Perdonatemi se riprendo un topic di quasi 6 anni fa, ma vorrei sapere come si può aumentare la memoria virtuale di default della java virtual machine. Vorrei che il limite fosse di 512 mb (o eventualmente di più) ogni volta, senza dover impostare manualmente il parametro ad ogni esecuzione.
Perdonatemi se riprendo un topic di quasi 6 anni fa, ma vorrei sapere come si può aumentare la memoria virtuale di default della java virtual machine. Vorrei che il limite fosse di 512 mb (o eventualmente di più) ogni volta, senza dover impostare manualmente il parametro ad ogni esecuzione.
per quanto ne so i valori sono hardcoded nella jvm (scusa anche tu il ritardo di 3 mesi nella risposta :D )
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.