Chriz21 Geschrieben 14. Juli 2005 Geschrieben 14. Juli 2005 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
perdian Geschrieben 14. Juli 2005 Geschrieben 14. Juli 2005 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.
Jaraz Geschrieben 14. Juli 2005 Geschrieben 14. Juli 2005 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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden