Problem mit garbage collector

Status
Nicht offen für weitere Antworten.
M

MRPSV

Gast
Hallo Leute,
ich hab ein Programm geschrieben mit dem man übers Netzwerk Dateien tauschen kann. Bis jetzt funktioniert es auch, das Problem is nur das wenn mein Programm eine Datei einliest, dass der Arbeitsspeicher sich total überfüllt und das lässt sich auch nach dem übertragen nicht mehr rüggängigmachen mit dem garbage collector nur mit einen Programmneustart. Ich lese die Dateien immer mb für mb in ein byte array und schicke es dann mit dem ObjectOutputStream raus. Woran kann das liegen??
 
M

MRPSV

Gast
Ja hab ich auch gedacht und hab alles mal testweise so programmiert das alle Variabeln die mit dem senden zu tun haben jedes mal mit new neu erstellt werden. Hat auch nichts genützt. Und der Bereich in dem die Datei gesendet wird, wird jedes mal neu erstellt und auch danach wieder gelöscht nachdem eine Datei komplett rausgesendet wurde. Somit dürften eigentlich keine Referenzen davon erhalten sein.
Ich hab aber eben herausgefunden das es daran liegt das alles was ich in den ObjectOutputStream schreibe und raussende ist das was im Speicher vorhanden bleibt, weil wenn ich die zeile rausnehme in der die Datei in denObjectOutputStream geschrieben wird, dann überfüllt sich auch der arbeitsspeicher nicht mehr. Hat jemand Erfahrung mit dem ObjectOutputStream, dass wenn sowas passiert??

DAnke schonmal für Ideen oder Lösungen.
 
M

MRPSV

Gast
Ne ich schließ den nich, weil man soll die möglichkeit haben noch eine Datei zu senden und außerdem ist da noch eine Chatfunktion im Programm die auch über dem selben ObjectOutputStream läuft. Sollte man für die Dateien eine extra Port öffnen und jedes mal schließen wenn die Datei drüben is??
 

Wildcard

Top Contributor
Ein ObjectOutputStream buffered alle geschriebenen Objekte und verwendet sie wieder.
Eigentlich ist das eh der völlig falsche Stream für MB große Daten aus einer Datei(!).
 
M

MRPSV

Gast
ok dann erklärt sich auch der Fehler den ich mal hatte mit dem byte array. Aber wie soll ich dann die Dateien senden??
 
M

MRPSV

Gast
Hmm eigentlich nichts. Aber kann man den BufferedOutputStream zwischen den Socket und und dem ObjectOutputStream einbinden?? Weil das Programm ist ja so geschrieben das es die Daten über den ObjectOutputStream raussendet, weil es ja nur so Strings und Bytearrays schicken kann. Und wie behebt der BufferedOutputStream den Fehler denn?? weil der bufferd doch auch die Daten wenn ich das richtig verstanden hab.
 

Wildcard

Top Contributor
Erklär mir zuerstmal warum du an irgendeiner Stelle deines Programms einen ObjectOutputstream benötigst um Binärdaten zu verschicken?
 
G

Guest

Gast
Weil ich in einem Objekt den Namen der Datei, die Größe, dass es überhaupt eine Datei is und das Bytearray der Datei selbst schreibe und es dann verschicke. Zugleich werden auch in einen Objekt der Text geschrieben der verschickt werden soll um mit jemanden zu chatten, den nur mit dem ObjectOutputStream kann ich beides zu gleich über einen Port senden.
 

Wildcard

Top Contributor
Wenn du bei dieser Architektur bleiben willst, muss dir aber klar sein das du erstens einen Overhead erzeugst (was für größere Datenmengen natürlich ungünstig ist) und (wie du ja bemerkt hast) dir massiv den Heap vollschreibst.
Als Quickfix kannst du versuchen den Stream zu reseten, allerdings bin ich mir nichtmal 100% sicher ob dabei auch der interne Cache gelöscht wird.
Ein ObjectOutput/InputStream ist nicht für binäre Daten gedacht.
Ich vermute mal du baust eine art Chat Client der auch Dateien übertragen kann. Hast du mal über eine RMI basierte Lösung nachgedacht?
 
M

MRPSV

Gast
Ja es is ein Chatclient der auch Dateien übertragen kann und es gibt auch eine Serverversion die leider auch eine heapüberfüllung bekommt. Aber wie sendet man denn dann in Java Dateien über das Netzwerk wenn ObjectOutput und InputStream nich dafür gedacht sind?? Es gibt doch keine anderen möglichkeiten um einen Stream aufzubauen als mit diesen beiden Klassen, weil sie doch die Grundklassen aller anderen Streamklassen, soweit ich mich erinnere.
 
M

MRPSV

Gast
ohh sorry ich dachte du meintest, dass man mit den Klassen OutputStream und InputStream keine binäre Daten schicken kann. Aber schicke ich dann binäre Daten??
 

Wildcard

Top Contributor
Absolut nicht. Es gibt zig verschiedene Streams, und die Object-Streams sind in der Tat sehr speziell.
Die Basis bilden InputStream und OutputStream.
Eine erweiterung sind dann zB die gepufferten Streams BufferedInputStream und BufferedOutputStream. Damit schickt man zum Beispiel gerne Binärdaten.
Für Strings wiederum nimmt man gerne Reader und Writer.
ObjectOutputStreams hingegen sind zur Serialisierung von Objekten gedacht.
 
G

Guest

Gast
Bevor das Programm Dateien schicken konnte hab ich auch Reader und Writer benutzt, nur danach wusste ich nich wie ich Dateien über den selben Port schicken sollte um Strings und Bytearrays schicken zu können daher kam ich auf die Idee immer ein Object mit dem ObjectOutputStream zu schicken weil ich da ja beides zugleich reinbekommen hatte.
 

Wildcard

Top Contributor
Du Grundidee ist ja nicht verkehrt, aber auf diese Weise erzeugst du bei Dateien einen riesigen Overhead.
 
M

MRPSV

Gast
Ja ok dann weis ich erstmal was das Problem war. Nun brauch ich aber ja einen neuen Ansatz. Sollte ich jetzt einen weiteren Socket öffnen und über den ein BufferedOutputStream und BufferedInputStream öffnen um darüber die Dateien zu schicken??oder gibt es eine Möglichkeit über ein und den selben Socket eine Reader, Writer BufferedInputStream und BufferedOutputStream zu öffnen?? Oder eine andere Idee mit der ich dann die Daten buffern kann und binäre Daten und einfache Strings senden kann über den selben Socket??
 
G

Guest

Gast
Also von RMI hab ich leider keine Ahnung aber ich denke mal, dass das dann geht mit einen anderen Socket die Dateien zu schicken. Weil es das einzigste ist was mir sonst noch einfällt wie es dann realisierbar wäre.
Aber dank dir für die Hilfe nach der suche des Problems.
Ich schau dann nochmal ob ich das hinbekomme das mit RMI zu realisieren.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
krgewb Problem mit Umlauten und Eszett bei InputStream Allgemeine Java-Themen 3
Max246Sch Backtracking Problem Box Filler Allgemeine Java-Themen 6
NightVision402 VisualVM Startskript Problem Allgemeine Java-Themen 3
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
F Problem mit PDFBOX Library Allgemeine Java-Themen 1
A Java modul Problem Allgemeine Java-Themen 4
D Read JSON File Problem Allgemeine Java-Themen 9
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
J Problem mit JasperReports Allgemeine Java-Themen 8
M log4j Problem mit jlink Allgemeine Java-Themen 19
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
P Selenium . getText Problem Allgemeine Java-Themen 9
A Jar zu Exe Problem Allgemeine Java-Themen 13
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
A Thread.sleep Problem Allgemeine Java-Themen 2
A Problem bei der Nachbarschafttest Allgemeine Java-Themen 11
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
G javamail Problem beim Empfangen von Nachrichten Allgemeine Java-Themen 3
Splayfer JDA Problem mit MessageCounter Allgemeine Java-Themen 0
Splayfer Problem mit BufferedWriter Allgemeine Java-Themen 3
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
N Maven Problem mit Datenbanktreiber (H2 Embedded) Allgemeine Java-Themen 12
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
C ArrayList Problem Allgemeine Java-Themen 3
kev34 nim-Spiel problem Allgemeine Java-Themen 1
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
G Welches Problem besteht bei den Typparametern? Allgemeine Java-Themen 5
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
T PIM basierend auf netbeans via AnyDesk Problem Allgemeine Java-Themen 3
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
Kirby.exe Verständnis Problem bei Rucksack Problem Allgemeine Java-Themen 6
B Eclipse-Lombok-Problem Allgemeine Java-Themen 19
I Input/Output ObjectOutputStream - Problem Allgemeine Java-Themen 7
1 Multiple Choice Knapsack- Problem Allgemeine Java-Themen 2
kodela Problem mit strukturiertem Array Allgemeine Java-Themen 18
E Problem mit Gridlayout und Button Allgemeine Java-Themen 2
A Array Problem Allgemeine Java-Themen 8
bueseb84 Problem Allgemeine Java-Themen 0
S Problem mit Arrays Allgemeine Java-Themen 1
D Nullpointer Exception Problem Allgemeine Java-Themen 5
B Problem mit meinen Klassen Allgemeine Java-Themen 6
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
J Problem beim Umstellen auf Java jdk 13 Allgemeine Java-Themen 3
J Problem bei Install java 13 Allgemeine Java-Themen 3
X Profitable Reise Problem Allgemeine Java-Themen 32
A Problem beim öffnen von Java-Installern Allgemeine Java-Themen 1
Dann07 Problem mit JavaMail API Allgemeine Java-Themen 26
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
J Clear-Problem Allgemeine Java-Themen 10
B Problem zu einem Java Projekt Allgemeine Java-Themen 6
S JFileChooser Problem Allgemeine Java-Themen 4
M Traveling Salesman - MST Heuristik Problem Allgemeine Java-Themen 4
J Traveling Salesman Problem Allgemeine Java-Themen 14
E Java Editor Problem mit 2er Exceptions Allgemeine Java-Themen 12
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
M Salesman Problem - Bruteforce Algorithmus Allgemeine Java-Themen 23
S Methoden Problem mit NullPointerException Allgemeine Java-Themen 9
Javafan02 Problem mit if-clause Allgemeine Java-Themen 17
J Lombok Problem mit Konstruktoren bei Verberbung Allgemeine Java-Themen 1
kodela Event Handling Problem mit der Alt-Taste Allgemeine Java-Themen 16
W Threads Problem Allgemeine Java-Themen 15
D (Verständnis-)Problem mit Unterklasse Allgemeine Java-Themen 4
S Problem mit Generic bei unmodifiableCollection Allgemeine Java-Themen 4
S jserialcomm Problem Allgemeine Java-Themen 1
Flynn Thread-Problem... Allgemeine Java-Themen 2
J Generische Interface - Problem Allgemeine Java-Themen 3
G Problem beim GUI Allgemeine Java-Themen 9
L Applet Problem "security: Trusted libraries list file not found" ? Allgemeine Java-Themen 7
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
T Problem mit externen Datenbankzugriff über SSH Tunnel Allgemeine Java-Themen 4
F Problem beim Einlesen einer Textdatei Allgemeine Java-Themen 12
S Java OpenOffice Problem mit Windows-Benutzerwechsel Allgemeine Java-Themen 19
K Threads RAM Problem Allgemeine Java-Themen 20
P Operatoren Problem mit Zähler in recursiver Schleife Allgemeine Java-Themen 2
C Int Problem Allgemeine Java-Themen 8
C J2V8 NodeJs Java Bride Problem und Frage!?!? Allgemeine Java-Themen 1
J Problem bei Hashmap Key-Abfrage Allgemeine Java-Themen 4
C Webseiten Programm problem Allgemeine Java-Themen 5
M LocalDate Problem Allgemeine Java-Themen 4
J "Problem Objektorientierung" Allgemeine Java-Themen 20
geekex Problem Meldung! Was tun?! Allgemeine Java-Themen 19
T Klassen Override Problem Allgemeine Java-Themen 7
L Unbekanntes Problem Allgemeine Java-Themen 1
FrittenFritze Problem mit einer JComboBox, Event temporär deaktivieren Allgemeine Java-Themen 11
Blender3D Java Swing Programm Windows 10 Autostart Problem Allgemeine Java-Themen 2
F HTTPS Zertifikat Problem Allgemeine Java-Themen 3
M OpenCV KNearest Problem Allgemeine Java-Themen 0
Tommy Nightmare Project Euler: Problem 22 Allgemeine Java-Themen 2
C Abstrakte Klasse, lokale Variable-Problem Allgemeine Java-Themen 1
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
P Eclipse Projekt anlegen macht Problem Allgemeine Java-Themen 1
RalleYTN META-INF/services Problem Allgemeine Java-Themen 3
F Java Mail Problem: Authentifizierung wird nicht immer mitgeschickt Allgemeine Java-Themen 1
I Problem beim Aufrufen, von Objektmethoden/ -variablen Allgemeine Java-Themen 6

Ähnliche Java Themen


Oben