I/O Avançado

Mapeie arquivos maiores que 2GB com limpeza determinística 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
Viu um problema com este código? Nos avise.
📏

Sem limite de tamanho

Mapeie arquivos maiores que 2GB sem soluções alternativas.

🔒

Limpeza determinística

Arena garante que a memória é liberada ao sair do escopo, não pelo GC.

Melhor desempenho

Alinhado com modelos de memória e hardware modernos.

Abordagem Antiga
MappedByteBuffer
Abordagem Moderna
MemorySegment com Arena
Desde o JDK
22
Dificuldade
Avançado
Mapeamento de arquivos em memória
Disponível

Disponível desde o JDK 22 (março de 2024)

A API Foreign Function & Memory (JEP 454) introduz o MemorySegment para acesso seguro e eficiente à memória. Diferente do MappedByteBuffer, o MemorySegment suporta arquivos maiores que 2GB (Integer.MAX_VALUE), oferece limpeza determinística via Arena e melhor desempenho com hardware moderno.

Compartilhar 𝕏 🦋 in