I/O Experte

Dateien größer als 2 GB mit deterministischer Bereinigung über MemorySegment abbilden.

✕ Java 8
try (FileChannel channel =
    FileChannel.open(path,
        StandardOpenOption.READ,
        StandardOpenOption.WRITE)) {
    MappedByteBuffer buffer =
        channel.map(
            FileChannel.MapMode.READ_WRITE,
            0, (int) channel.size());
    // Limited to 2GB
    // Freed by GC, no control
}
✓ Java 22+
FileChannel channel =
    FileChannel.open(path,
        StandardOpenOption.READ,
        StandardOpenOption.WRITE);
try (Arena arena = Arena.ofShared()) {
    MemorySegment segment =
        channel.map(
            FileChannel.MapMode.READ_WRITE,
            0, channel.size(), arena);
    // No size limit
    // ...
} // Deterministic cleanup
Problem mit diesem Code entdeckt? Sag uns Bescheid.
📏

Keine Größenbeschränkung

Dateien größer als 2 GB ohne Umwege abbilden.

🔒

Deterministische Bereinigung

Arena stellt sicher, dass der Speicher beim Verlassen des Gültigkeitsbereichs freigegeben wird, nicht erst beim GC.

⚡

Bessere Performance

Abgestimmt auf moderne Speichermodelle und Hardware.

Alter Ansatz
MappedByteBuffer
Moderner Ansatz
MemorySegment mit Arena
Seit JDK
22
Schwierigkeitsgrad
Experte
Datei-Memory-Mapping
Verfügbar

Verfügbar seit JDK 22 (März 2024)

Die Foreign Function & Memory API (JEP 454) führt MemorySegment für sicheren und effizienten Speicherzugriff ein. Im Gegensatz zu MappedByteBuffer unterstützt MemorySegment Dateien größer als 2 GB (Integer.MAX_VALUE), bietet deterministische Bereinigung über Arena und bessere Performance mit moderner Hardware.