0Pricing
Java Academy · Ders

MemorySegment ve Arena

Yığın dışı bellek ayırın

MemorySegment ve Arena, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.

Yığın Dışı Bellek

FFM, yerel ve yığın dışı belleği iki temel türle modeller: MemorySegment bitişik bir bellek bölgesini, Arena ise bu bölgenin yaşam süresini yönetir.

Birlikte, geçmişte kullanılan güvensiz ve elle yapılan arabellek yönetiminin yerini alırlar.

MemorySegment Nedir

Bir MemorySegment, bir bellek bloğu üzerinde tür bilgisi taşıyan bir penceredir. Boyutunu ve yaşam süresini bilir; her erişim sınır denetiminden geçer.

Bölgeler yığın dışında olabilir (yerel olabilir) veya yığın içindeki bir diziyi sarabilir.

Arena Nedir

Bir Arena, bölgeler ayırır ve bunların ne zaman serbest bırakılacağını belirler. Arena kapandığında, tüm bölgeleri tek ve belirlenebilir bir adımda geçersiz hâle gelir.

  • Arena.ofConfined(): tek iş parçacığı, açıkça kapatma
  • Arena.ofShared(): çok iş parçacıklı erişim
  • Arena.global(): asla serbest bırakılmaz
  • Arena.ofAuto(): çöp toplayıcı tarafından serbest bırakılır

Bölge Ayırma

Kaynakları yöneten try-with-resources yapısındaki kısıtlı bir arena tipik kalıptır. Baytları ayırın, kullanın; kapatma işlemi her şeyi serbest bırakır.

import java.lang.foreign.*;

public class Main {
    public static void main(String[] args) {
        try (Arena arena = Arena.ofConfined()) {
            MemorySegment seg = arena.allocate(16);
            System.out.println("Allocated bytes: " + seg.byteSize());
        }
        System.out.println("Arena closed, memory freed");
    }
}

Yazma ve Okuma

Okuma ve yazma işlemlerini, bir ValueLayout ve ofset alan tür bilgili erişimciler aracılığıyla gerçekleştirirsiniz. Bu, erişimin tür açısından güvenli ve hizalı kalmasını sağlar.

import java.lang.foreign.*;

public class Main {
    public static void main(String[] args) {
        try (Arena arena = Arena.ofConfined()) {
            MemorySegment seg = arena.allocate(ValueLayout.JAVA_INT);
            seg.set(ValueLayout.JAVA_INT, 0, 42);
            int value = seg.get(ValueLayout.JAVA_INT, 0);
            System.out.println("Stored and read: " + value);
        }
    }
}

Türü Belirlenmiş Yuvalar Ayırma

Ham bayt sayıları yerine yerleşime göre bellek ayırın. arena.allocate(JAVA_INT), bir int için tam gereken ve doğru hizalanmış baytları ayırır.

Bu yaklaşım, boyutları elle hesaplama ihtiyacını ortadan kaldırır.

Değer Dizileri

Birden çok öğe depolamak için bir dizi yerleşimi ayırın veya bir sayı geçirin. Dizin erişimi, öğe boyutundan hesaplanan bir ofset kullanır.

import java.lang.foreign.*;

public class Main {
    public static void main(String[] args) {
        try (Arena arena = Arena.ofConfined()) {
            MemorySegment ints = arena.allocate(ValueLayout.JAVA_INT, 5);
            for (int i = 0; i < 5; i++) {
                ints.setAtIndex(ValueLayout.JAVA_INT, i, i * 10);
            }
            System.out.println("Element 3: " + ints.getAtIndex(ValueLayout.JAVA_INT, 3));
        }
    }
}

Sınır Denetimi

Bir bellek bölgesinin dışından okuma veya yazma işlemi IndexOutOfBoundsException fırlatır. Arena kapandıktan sonra bir bölgeye erişmek IllegalStateException fırlatır.

FFM belleğini, JNI'nin aksine güvenli kılan denetimler bunlardır.

İş Parçacığı Kısıtlaması

Kısıtlı bir arena, bölgelerini onu oluşturan iş parçacığına bağlar. Başka bir iş parçacığının bunlara erişmesi WrongThreadException fırlatır.

Gerçekten paylaşılan bellek için, küçük bir maliyet karşılığında çok iş parçacıklı erişime izin veren Arena.ofShared() kullanın.

Dizelerle Çalışma

FFM, Java dizeleri ile C dizeleri arasında geçiş yapmak için yardımcılar sunar. allocateUtf8String (daha yeni seçenek: allocateFrom) null sonlandırmalı bir dize yazar; getUtf8String ise bu dizeyi geri okur.

import java.lang.foreign.*;

public class Main {
    public static void main(String[] args) {
        try (Arena arena = Arena.ofConfined()) {
            MemorySegment cString = arena.allocateUtf8String("hello");
            System.out.println("Read back: " + cString.getUtf8String(0));
        }
    }
}

Arena Seçimi

Kılavuzlar:

  • Kısa ömürlü, tek iş parçacıklı arabellekler: ofConfined()
  • İş parçacıkları arasında paylaşılanlar: ofShared()
  • Yaşam süresi çöp toplayıcı tarafından yönetilenler: ofAuto()
  • Süreç genelindeki sabitler: global()

Hızlı Kontrol

Yerel belleğin ne zaman serbest bırakılacağını belirleyen şeyi hatırlayınız.

Özet

Yığın dışı bellek yönetimini öğrendiniz:

  • MemorySegment: sınırları denetlenen bir bellek bölgesi
  • Arena: yaşam süresini yönetir (kısıtlı, paylaşılan, otomatik, genel)
  • ValueLayout ile tür bilgili erişim; get/set ve getAtIndex
  • Sınır denetimleri ve kısıtlama sayesinde güvenlik

Sırada: aşağı çağrı tutamaçlarıyla yerel işlevleri çağırmak.

Sıkça Sorulan Sorular

“MemorySegment ve Arena” dersi ücretsiz mi?

Evet — “MemorySegment ve Arena” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.

“MemorySegment ve Arena” dersinde ne öğreneceğim?

Yığın dışı bellek ayırın Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Java Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“MemorySegment ve Arena” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. JNI Yerine FFM Neden Tercih Edilir
  2. MemorySegment ve Arena
  3. Downcall Tanıtıcıları
  4. Düzenler ve Yapılar
← Java Academy Sayfasına Dön