Gruß an alle,
Ich möchte eine transparente Persistenz von Java-Objekten durch Memory-Mapped-Dateien erreichen (unter Verwendung des OS-Paging/Swapping-Mechanismus).
Mein Problem ist: Wie kann ich ein Java-Objekt in meinen memory-mapped Block verschieben? Und wie kann ich eine neue Objektinstanz dazu zwingen, in einem solchen Block zu residieren?
Wie Sie alle wissen, kann ein Memory-Mapped-Block als Byte-Array angesehen werden, und was ich hier wirklich frage, ist, wie man den Adressraum von Java-Objekten mit dem von solchen Arrays überlappen kann? So dass wir die Daten immer noch über Objekte manipulieren können, während das Betriebssystem die Persistenz transparent handhabt (schreibt schmutzige Seiten).
Wenn Java mir dies nicht erlaubt, welche plattformübergreifende und Müll sammelnde OO-Sprache würden Sie mir empfehlen?
Ich danke Ihnen allen im Voraus.
0 Stimmen
Bitte, was ist Ihr Speicher gemappt Datei aus einer Java-Perspektive? Ist es eine Datei, oder ein MappedByteBuffer oder etwas anderes? Vielen Dank!
0 Stimmen
Bisher verwende ich einen MappedByteBuffer, aber ich bin bereit, etwas anderes zu verwenden, wenn es mir helfen wird, transparent persistent über Paging/Swapping zu erreichen, während noch in der Lage, meine Objekte als Objekte und nicht nur Rohdaten in einem Byte-Array zu verwenden
0 Stimmen
Ich habe herausgefunden, dass das Problem in Java dadurch verkompliziert wird, dass der Garbage Collector beim Finalisieren von Objekten eine speicherinterne Defragmentierung vornimmt.
0 Stimmen
Ich habe mir auch C# angesehen. Obwohl es "unsicheren" Code mit Zeigern erlaubt, sind Zeiger von Referenztypen (Objekte) NICHT erlaubt.
0 Stimmen
Frage ich etwas Dummes oder Schwieriges?!
0 Stimmen
Das hängt davon ab, was Sie erreichen wollen. Wenn es Ihnen nur um die Persistenz primitiver Daten geht, dann ist es einfach: Ihre echten Objekte umhüllen eine
ByteBuffer
der auf einen Ort in Ihrer Datei verweist, und delegieren Sie alle Getter und Setter an diesen Puffer. Wenn Sie die Komplexität erhöhen und Strings und Objektgraphen hinzufügen, werden Sie feststellen, dass Sie Ihren eigenen Speichermanager implementieren. Ziemlich viel Arbeit für wenig Ertrag, IMO.