I/O Avanzado

Mapea archivos de más de 2 GB con limpieza determinista usando MemorySegment.

✕ 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
¿Ves un problema con este código? Cuéntanos.
📏

Sin límite de tamaño

Mapea archivos de más de 2 GB sin soluciones alternativas.

🔒

Limpieza determinista

Arena garantiza que la memoria se libere al salir del ámbito, no en tiempo de GC.

Mejor rendimiento

Alineado con modelos de memoria y hardware modernos.

Enfoque Antiguo
MappedByteBuffer
Enfoque Moderno
MemorySegment con Arena
Desde JDK
22
Dificultad
Avanzado
Mapeo de archivos en memoria
Disponible

Disponible desde JDK 22 (marzo de 2024)

La API de funciones externas y memoria (JEP 454) introduce MemorySegment para un acceso a memoria seguro y eficiente. A diferencia de MappedByteBuffer, MemorySegment soporta archivos de más de 2 GB (Integer.MAX_VALUE), proporciona limpieza determinista mediante Arena, y ofrece mejor rendimiento con hardware moderno.

Compartir 𝕏 🦋 in