Zuerst hatte ich ein Problem damit, die Daten von der Datenbank zu bekommen, es hat zu viel Speicher gekostet und ist fehlgeschlagen. Ich habe -Xmx1500M eingestellt und benutze Scrolling ResultSet, so dass man sich darum gekümmert hat. Jetzt muss ich aus den Daten ein XML machen, aber ich kann es nicht in eine Datei schreiben. Im Moment mache ich es so:
%Vor%und es funktioniert; Ich bekomme 12 100 MB Dateien. Nun, was ich tun möchte, ist, all diese Daten in einer Datei zu haben (die ich dann komprimiere), aber wenn ich nur den if Teil entferne, geht mir der Speicher aus. Ich überlegte, ob ich versuchen sollte, in eine Datei zu schreiben, sie zu schließen und dann zu öffnen, aber das würde mich nicht sehr interessieren, da ich die Datei in den Speicher laden müsste, wenn ich sie öffne.
Warum nicht alle Daten in eine Datei schreiben und die Datei mit der Option "append" öffnen? Sie müssen nicht alle Daten in der Datei einlesen, wenn Sie nur darauf schreiben wollen.
Dies könnte jedoch eine bessere Lösung sein:
%Vor%Der BufferedOutputStream puffert die Daten vor dem Drucken und Sie können die Puffergröße im Konstruktor angeben, wenn der Standardwert nicht Ihren Anforderungen entspricht. Details finden Sie in der Java-API: Ссылка .
Sie sammeln die komplette Datei im Speicher: Sie sollten die Daten direkt in die Datei schreiben.
Darüber hinaus sollten Sie eine geeignete XML-API verwenden, anstatt XML als Textdatei zu erstellen. Ein kurzes Tutorial ist hier verfügbar.
Ok, also wird der Code neu geschrieben und ich werde die ganze Operation einschließen:
%Vor%Aber generateXML-Teil braucht immer noch viel Speicher (wenn ich richtig rate, dauert es Stück für Stück so viel wie es kann) und ich sehe nicht, wie ich es optimieren könnte (verwenden Sie eine alternative Möglichkeit, die writer.print-Funktion)?