Ich habe einen Datenverarbeitungscode, der das folgende Rezept verwendet:
- Lesen Sie so viele Daten ein, wie in den Speicher passen (nennen Sie dies einen "Chunk")
- Verarbeitung des Chunks durchführen
- Verarbeitete Chunks auf die Festplatte schreiben
- Wiederholen Sie
- ...
- Führen Sie alle verarbeiteten Chunks zusammen, um die endgültige Antwort zu erhalten.
Diese letzte Phase ist am effizientesten, wenn es so wenig Chunks wie möglich gibt, daher möchte ich, dass die erste Phase so viele Daten einliest, wie in den Speicher passen. Dies kann ich durch die Abfrage [Runtime.freeMemory()
](http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#freeMemory()) .
Dies bedeutet jedoch, dass ich Folgendes aufrufen muss [System.gc()
](http://java.sun.com/j2se/1.4.2/docs/api/java/lang/System.html#gc()) oder die Zahl, die von Runtime.freeMemory()
ist viel kleiner als die Menge an Speicher, die ich sicher zuweisen könnte.
Ich habe eine Reihe von Behörden sagen hören, dass das Anrufen System.gc()
ist ausdrücklich eine schlechte Idee. Gibt es eine Möglichkeit, dies zu vermeiden?