Programmieren - alles kontrollieren 4.934 Themen, 20.613 Beiträge

Problem mit garbage collecor in java

MRPSV1 / 5 Antworten / Flachansicht Nickles

Hallo Leute
Ich habe ein Programm geschrieben mit dem man im Netzwerk ganz einfach Dateien austauschen kann. So bisher funktioniert das Programm super, es tauscht die Dateien aus, egal welches Format und sie sind auch am ende immer noch ausführbar und so. Ich ich lese die Dateien in ein byte array ein, was 1mb groß is und sende dieses Array über dem Stream raus. Aber jedes mal wenn er den nächsten mb aus der Datei lesen soll erstellt es das byte array in einer Schleife mit new byte neu und das Array mit dem vorherigen mb aus der Datei bleibt im Arbeitsspeicher vorhanden und lässt sich mit dem garbage collector auch nicht entfernen. wenn ich z.B. eine Datei sende die 20mb groß ist steigt der Arbeitsspeicher verbrauch meines Programms während des sendens und bleibt so groß. Wenn ich dann auch diese Datei nochmal senden würde hält das Programm während des sendens an und ich bekomme einen Fehler ausgegeben das der Heapspace voll ist. was muss ich tun um die gesendete Datei wieder aus dem Arbeitsspeicher wieder gelöscht wird?? auch System.gc(); nützt nichts.

Danke schonmal im vorraus.

bei Antwort benachrichtigen
MRPSV1 Nachtrag zu: „Ja aber das musste ich so schreiben, den sonst sendete das Programm immer wieder...“
Optionen

ich hab da noch ein idee.
kann das vieleicht an den threads liegen??denn ich hab drei threads in dem programm laufen einmal das programm selbst eine dauerschleife die auf eingehende daten wartet und einmal die schleife die nur solange läuft bis die datei kommplett gesendet wurde....kann das sein das der garbagecollector in jeden thread unterschiedlich läuft(also ich meine das mein gesamtes programm im prinzip drei garbage collectoren am laufen hat) und das ich ihn in jeden thread extra mit System.gc(); starten muss??

bei Antwort benachrichtigen