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 kapatmaArena.ofShared(): çok iş parçacıklı erişimArena.global(): asla serbest bırakılmazArena.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ölgesiArena: yaşam süresini yönetir (kısıtlı, paylaşılan, otomatik, genel)ValueLayoutile tür bilgili erişim;get/setvegetAtIndex- 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
- JNI Yerine FFM Neden Tercih Edilir
- MemorySegment ve Arena
- Downcall Tanıtıcıları
- Düzenler ve Yapılar