# RAM Speicher in Datei auslagern (Java Swapping)



## Craven (24. Jun 2004)

Hallo Leute!

Folgendes Problem: Habe JTables (vgl. JTable Frage in AWT/Swing Forum), die sehr groß sind und sehr viel Arbeitsspeicher brauchen. 

Ist es möglich ein Java Swapping durchzuführen? Soll heißen, die Daten, die in der JTable dargestellt werden sollen nicht in den Arbeitsspeicher sondern auf Platte geschrieben werden (dadurch muß ich den Sortieralg.) nicht verändern.

Hat jemand eine Idee?

Danke

Craven
PS: Welche generelle Möglichkeit hat man, den Arbeitsspeicherverbrauch von Java zu minimieren?! Sobald ein wenig Swing dabei ist, zieht so ein Prog jedesmal an die 20Mb!


----------



## bygones (24. Jun 2004)

meines wissens geht das nicht - du gibst ja der VM ne größe von MB mit. Wenn diese ausgeschöpft sind wird n OutOfMemory geworfen. Also direktes Swapping ist somit nciht möglich.

Möglichkeit wg. Tables glaub ich wurde hier schon öfters diskutiert - so dass du immer nur die Daten lädst die auch wirklich angezeigt werden.

Den Heap von der VM kannst du übrigens mit den VM Kommandos -Xms128M -Xmx128M ändern (-Xms minimaler Speicher, -Xmx maximaler Speicher)


----------



## Grizzly (24. Jun 2004)

Craven hat gesagt.:
			
		

> [...]PS: Welche generelle Möglichkeit hat man, den Arbeitsspeicherverbrauch von Java zu minimieren?! Sobald ein wenig Swing dabei ist, zieht so ein Prog jedesmal an die 20Mb!



Die VM braucht schon mal speicher. Und dann wird auch immer mehr Heap-Speicher von der VM reserviert, als das Programm momentan wirklich braucht.


----------



## CoolHour (29. Jun 2004)

Hi!

Wie wärs, wenn Du die JTABLE als Objekt auf Platte schreibst (serialisierts). Dann gibt die JVM den Speicher frei und später deserialisierst du das Objekt wieder.

Gruß
CoolHour

Keep it real!
Http://www.java-studio.de


----------



## nekton (2. Jul 2004)

CoolHour hat gesagt.:
			
		

> Wie wärs, wenn Du die JTABLE als Objekt auf Platte schreibst (serialisierts). Dann gibt die JVM den Speicher frei und später deserialisierst du das Objekt wieder.



ich wuerde es auch aehnlich machen. die spalten/zeilen die die brauchst (sprich angezeigt werden) bleiben im speicher. den rest wuerde ich serialisiert und komprimiert wegschreiben (sprihc auf platte oder in den speicher... je nach dem: http://www.java-forum.org/de/viewtopic.php?t=2061). soweit nicht viel neues. um jedoch nich fuer jedes objekt eine datei auf die platte schrieben zu muessen wuerde ich mit einem random access file ( http://javaalmanac.com/egs/java.io/UseRandomAccessFile.html) die objekte eben in den swap schreiben. das einige problem was du dann noch umgehen musst ist, dass wenn du ein objekt aus der mitte der datei rausnimmst die position der nachfolgenden entsprechend auf die neuen addressen gesetzt werden. sprich


```
0x000 Obejtk1 (100 Byte)
0x064 Objekt2 (100 Byte)
0x0C8 Objekt3 (100 Byte)
0x12C [EOF] (1 Byte)

(Objekt2 wird entfernt)

0x000 Obejtk1 
0x064 Objekt3
0x0C8 [EOF]
```

Nicht ganz ohne aber durchaus interessant  - ich kann mir allerdings gut vorstellen, dass es diverse swap verfahren gibt die bessere alghorythmen/techniken verwenden als die methode oben.


----------

