ObjectInputStream und OutOfMemory

Status
Nicht offen für weitere Antworten.
J

JavaDirk

Gast
Hallo,

ich habe eine kleine Frage, wie ObjectInputStreams arbeiten:
Wenn ich so einen erzeuge, wird Java dann die komplette Datei in den Speicher schaufeln? Anders kann ich mir nicht erklären, wie in meinem Programm der OutOfMemory zu Stande kommt...
Weil ich nämlich immer nur in einer Schleife ein Objekt lese, dieses in einen ObjectOutputStream schreibe und fertig. Die Datei, die ich einlesen will, ist sehr groß (>200 MB). Oder liegt das eher daran, dass man periodisch die reset-Methode auf den ObjectOutputStream aufrufen sollte?

Freue mich auf eure Antworten !

Dirk
 

foobar

Top Contributor
Versuch mal den Stream regelmäßig zu flushen. Ansonsten mußt du mehr Arbeitsspeicher allokieren:
Code:
java -Xms 250M
http://java.sun.com/j2se/1.4.2/docs/api/java/io/ObjectOutputStream.html#flush()
 
J

JavaDirk

Gast
Hallo,

bin mit dem allokierten Speicher schon an der oberen Grenze, mehr geht da nicht.
Aber zurück zum Problem: Oder könnte es sein, dass die ausgelesenen Objekte aus der Datei anschließend im ObjectInnputStream gespeichert werden, so dass dadurch irgendwann der Speicher voll wird? Kann das einer von euch bestätigen oder verneinen? Und wenn es so ist: wie vermeide/verhindere ich das?

Vielen Dank,
Dirk
 

foobar

Top Contributor
Poste doch mal etwas Code, vielleicht mußt du ein paar Variablen wieder auf null setzen.
 

jptc.org

Bekanntes Mitglied
Verwendest Du den ObjectInputStream direkt, oder kapselst Du diesen Stream noch über einen BufferedInputStream?
 
J

JavaDirk

Gast
hier ein Code-Ausschnitt:
Code:
try{
      FileInputStream tempfile = new FileInputStream(CodexTesterMain.tempPath+filename);
      ObjectInputStream in = new ObjectInputStream( tempfile );
      //alles etwas unsauber... wir lesen solange, bis ne IOException geworfen wird
      while (true){
	vp = (ValuePair)in.readObject();
	StringBuffer temp=new StringBuffer();
	temp.append(((Parameter)para.getSubparameter().elementAt(i)).getName()).append(" := ").append(vp.getValue());
	int threshold=vp.getThreshold();
	vp=null;
	temp.insert(0,addSpaces.toString()).insert(0,whiteSpace8).insert(0,"{\n").
                     append("\n").append(whiteSpace6).append(addSpaces.toString()).append("}");
        o.writeObject(new ValuePair(temp.toString(),threshold));
            
        flushCounter++;
        if (flushCounter>100) {
            o.flush();
	    flushCounter=0;
	}
      }
}catch (IOException ioe){
}catch (ClassNotFoundException cnf){
}

Der OutOfMemory kommt in der 7. Zeile, ValuePair ist ein Objekt, was aus einem String und einem int besteht.
 
J

JavaDirk

Gast
Hallo,

ich bin mir zur Zeit sehr sicher, dass der ObjectInputStream die Objekte, die er aus einer Datei gelesen hat, in sich speichert (warum auch immer), so dass dadurch der outOfMemory irgendwann herrührt. Habe das Problem so gelöst, dass ich meine Inputdatei in mehrere kleine aufspalte und den jeweiligen inputStream schliesse, wenn ich mit der Datei fertig bin. OutOfMemory kam da noch nie.

Ciao,
Dirk
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Input/Output ObjectInputStream.HandleTable OutOfMemory Allgemeine Java-Themen 8
O Auslesefehler beim ObjectInputStream(Array) Allgemeine Java-Themen 6
P ObjectOutputStream oder ObjectInputStream fehlerhaft? Allgemeine Java-Themen 7
P ObjectInputStream kann nicht vernünftig lesen... Allgemeine Java-Themen 9
T ObjectInputStream - Arrayliste, die unbekannte Objekte enthält Allgemeine Java-Themen 9
T Klasse in externer JAR mit ObjectInputStream Allgemeine Java-Themen 14
B ObjectInputStream - Wann ist Ende erreicht? Allgemeine Java-Themen 10
C Eclipse OutOfMemory nach dem exportieren Allgemeine Java-Themen 4
A Interpreter-Fehler OutOfMemory Exception mit Base64 decode Allgemeine Java-Themen 3
J BufferedReader OutOfMemory umgehen? Allgemeine Java-Themen 10
N OutOfMemory Allgemeine Java-Themen 5
G OutOfMemory Error bei Zahlenkonvertierungsprogramm Allgemeine Java-Themen 5
B Java OutOfMemory Error verhindern, Resourcenbedarf präventiv abschätzen? Allgemeine Java-Themen 19
M OutOfMemory Exception? Allgemeine Java-Themen 12
N OutOfMemory nur wenn -Xmx gesetzt ist?! Allgemeine Java-Themen 6
E java.lang.outofmemory über windows-cmd ändern Allgemeine Java-Themen 6
R Speicherprobleme (OutOfMemory Error) Allgemeine Java-Themen 26
V JVM OutofMemory Linux geht, windows nicht Allgemeine Java-Themen 3
H java heap space (outofmemory error) Allgemeine Java-Themen 3
K OutOfMemory beim Entzippen Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben