Speicherverwaltung, Framework gesucht

Moien

Ich soll in java mit recht umfangreichen Bilddaten (Grauwerte, 64 bis 128 unterschiedliche Farben) arbeiten. Die Rohdaten haben etwa 1GB und die Algo brauchen 2 oder mehr Kopien (Transformationen, von alten Werte in neue). Bis jetzt arbeiten alle Algos relativ lokal, d.h. sie greifen die Daten immer nur in einem gewissen Bereich ab und schreiben auch nur „in der Nähe“. Das Workset ist überschaubar (~ 100 Pixel Umkreis).

Mein Problem liegt in der VM: ich bin auf die 32Bit Version festgelegt. D.h. dem System geht garantiert der RAM aus.

Gibt es ein Framework das Teile von byte[][][] dynamisch auf Platte auslagert? Ich könnte es selbst schreiben (SoftReference, 1-2 Wrapper, ein bisschen nio, gut schütteln) aber wenn es das schon fertig und frei (zLib, BSD,…) gibt?

Danke

Wenn ich richtig verstanden habe, nimmst du das Bild unterteilst es in Quadranten (100px X 100px) und jagst deine Algo´s rüber.
Dann könntest du doch ein Object anlegen, das die Ergebnissmenge enthält und es durch Serialisierung auf die Platte schreiben und später wieder durch „Deserialisirung“ von der Platte lesen und verarbeiten.
Ist nicht sehr elegant und verursacht einiges an Schreib/-Lesezugriffe, müsste aber klappen.

Moien

Wenn ich richtig verstanden habe, nimmst du das Bild
unterteilst es in Quadranten (100px X 100px) und jagst deine
Algo´s rüber.

Nein, nicht ganz. Die Algos gehen über die Bilder (Pixel für Pixel) und benutzen dabei ein 100 x 100 Pixel grosses Feld rund um das akutelle Pixel. D.h. zerlegen in 100x100’er Stücke ist zwar nett, aber ich bräucht dann immer 4 im RAM.

Und 100x100 Byte ist eine winzige Datenmenge (im Vergleich zu den 1 GB Rohdaten). Soviele schreib/lese Zugriffe wollt ich dann doch lieber nicht machen… vorallem weil ich die Pixel ja öfter brauche.

Kennst du Sobel-Filter? Stell dir das mit einer Kernelgrösse von 100x100 Pixel vor.

Dann könntest du doch ein Object anlegen, das die
Ergebnissmenge enthält und es durch Serialisierung auf die
Platte schreiben und später wieder durch „Deserialisirung“ von
der Platte lesen und verarbeiten.

Ja, klar. Aber das Problem ist so allgemein, dafür müsste es schon ein Framework geben.

cu

Ja, klar. Aber das Problem ist so allgemein, dafür müsste es
schon ein Framework geben.

bei WebApps wird sehr oft Structs benutzt (Serialisierung von Beans usw.) keine Ahnung ob es dir was bring. Da ich selber noch nicht all zu viele Erfahrung mit diesem Framework habe (Bis jetzt habe ich alle meine WebApps „hart-gecodet“ ohne Frameworks), kann ich nicht sagen in wie weit dir das was bringt bzw. in wie weit dieser Tip richtig ist…