Zum Inhalt springen

Java Arbeitsspeicher bei Filewriter


Chriz21

Empfohlene Beiträge

Hallo,

ich hab ein kleines Problem an dem ich nicht weiterkomme. Also ich mache nichts anderes als ganz viele Dateien zur Erzeugen und dort einen kleinen String reinzuschreiben, der auch immer gleich lang ist.

Hier der Programmausschnitt:

for(int i=0;i<anzahl;i++){

String mrn=new_mrn.getMrn(applikation.name.getText());

FileWriter fos3 = new FileWriter(applikation.panel3_auftrag.getText()+"/Auftrag_Simu3_"+mrn+".aut");

fos3.write(mrn);

fos3.close();

}

Das ganze funktioniert soweit, nur ich benutzte, je mehr Dateien ich erzeuge, immer mehr Arbeitsspeicher was ich im Task-Manager beobachten kann.

Kommentiere ich aber den Befehl fos3.write(); raus, bleibt die Speichernutzung konstant. Mir kommt es so vor als würde ich in den RAM schreiben mit dem Befehl write(), aber das mache ich ja nicht, in den Dateien ist ja auch der String. Das Problem ist ich darf den Arbeitsspeicher nicht so in anspruch nehmen.

Ich hab das mal getestet bei 10000 durchläufen ohne fos3.write(); da brauchte ich ca. 1500 KB RAM und das bleibt auch die ganze Zeit konstant, mit dem Befehl fos3.write(); allerdings brauchte ich ca. 13000 KB RAM, und je mehr druchläufe ich mach desto grösser wird der.

Die Datei erzeuge ich ja mit dem FileWriter auch ohne das write, damit schreibe ich ja nur den String rein.

Mache ich da was falsch oder muss ich das irgendwie anders machen?

Danke und Gruß,

Chriz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mache ich da was falsch oder muss ich das irgendwie anders machen?
Deine Herangehensweise ist absolut in Ordnung. Das einzige, was mir noch auffällt ist dies hier:


  fos3.write(mrn);

  [b]fos3.flush();[/b]   // Zur Sicherheit, falls der Stream nicht auto flushed

  fos3.close();

Was den Speicherverbrauch angeht: Probier mal zwischendurch mit System.gc() den Garbage Collector zu ermutigen seine Arbeit zu tun - vielleicht liegen die Daten einfach nur noch auf dem Heap und genießen die Aussicht :)

Wobei 1,5 MB an RAM für eine normale Java Anwendung schon sehr niedrig ist, ich würde mir da also keine Gedanken machen, das ist alles noch im grünen Bereich.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

wenn der Speicher stetig bis zur OutOfMemoryException steigt, erzeugst du bei den Methodenaufrufen getMrn(...) und getText() weitere Objecte und hälst irgendwo eine Referenz darauf.


import java.io.*;


public class Test {

	public static void main(String[] args) throws Exception {

		for (int i = 0; i < 50000; i++) {

			String mrn = "blahhhhhshh";

			FileWriter fos3 = new FileWriter("dump/" + i + "ssaaaaa.txt");

			fos3.write(mrn);

			fos3.close();

		}

	}

}

pendelt sich bei mir bei Konstanten 6,5 MB ein.

Gruß Jaraz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...