Mapeo de archivos en memoria
Mapea archivos de más de 2 GB con limpieza determinista usando MemorySegment.
Comparación de Código
✕ 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.
Por qué gana la forma moderna
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
Soporte JDK
Mapeo de archivos en memoria
Disponible
Disponible desde JDK 22 (marzo de 2024)
Cómo funciona
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.
Documentación Relacionada