I/O İleri

MemorySegment kullanarak 2 GB'tan büyük dosyaları belirleyici temizlemeyle eşleyin.

✕ 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
Bu kodda bir sorun mu gördünüz? Bize bildirin.
📏

Boyut sınırı yok

Geçici çözümler olmadan 2 GB'tan büyük dosyaları eşleyin.

🔒

Belirleyici temizleme

Arena, belleğin GC zamanında değil kapsam çıkışında serbest bırakılmasını sağlar.

Daha iyi performans

Modern bellek modelleri ve donanımla uyumlu.

Eski Yaklaşım
MappedByteBuffer
Modern Yaklaşım
Arena ile MemorySegment
JDK'dan itibaren
22
Zorluk
İleri
Dosya bellek eşleme
Mevcut

JDK 22'den itibaren kullanılabilir (Mart 2024)

Foreign Function & Memory API (JEP 454), güvenli ve verimli bellek erişimi için MemorySegment'i tanıtır. MappedByteBuffer'dan farklı olarak MemorySegment, 2 GB'tan (Integer.MAX_VALUE) büyük dosyaları destekler, Arena aracılığıyla belirleyici temizleme sağlar ve modern donanımla daha iyi performans sunar.

Paylaş 𝕏 🦋 in