Sobes.tech
Middle

Java-da hansı növ referanslar mövcuddur və onların xüsusiyyətləri nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Java-da, yaddaş idarəetməsi üçün davranış fərqli olan üç əsas referans növü mövcuddur:

  • Güclü Referans (Strong Reference)
  • Yumuşaq Referans (Soft Reference)
  • Zayıf Referans (Weak Reference)
  • Fantom Referans (Phantom Reference)

Güclü Referans (Strong Reference)

Ən çox istifadə olunan referans növüdür. Güclü referansla göstərilən obyekt, ən azı bir güclü referans mövcud olduğu müddətcə, yaddaş idarəedicisi tərəfindən silinməz.

// Obyektin yaradılması və ona güclü referans
Object myObject = new Object(); 

Yumuşaq Referans (Soft Reference)

Yumuşaq referans, JVM yaddaş ehtiyac duyduqda obyektin silinə biləcəyi obyektə işarə edir. Yumuşaq referansla göstərilən obyektlər, yaddaş azaldıqda, silinə bilər və adətən keşik üçün istifadə olunur.

import java.lang.ref.SoftReference;

// Obyektin yaradılması
Object data = new Object(); 
// Obyektə yumuşaq referans
SoftReference<Object> softRef = new SoftReference<>(data); 

// Əgər yaddaş kifayət deyilsə, obyekt silinə bilər
// Əgər obyekt silinməyibsə, ona yenidən çatmaq olar
Object retrievedData = softRef.get(); 

Zayıf Referans (Weak Reference)

Zayıf referans, obyektə işarə edir və obyekt, yaddaş idarəedicisi tərəfindən istənilən vaxt silinə bilər, əgər ona başqa güclü referans yoxdursa. Bu, keşik üçün istifadə olunur.

import java.lang.ref.WeakReference;

// Obyektin yaradılması
Object cacheEntry = new Object(); 
// Obyektə zəif referans
WeakReference<Object> weakRef = new WeakReference<>(cacheEntry); 

// Obyekt, yaddaş azaldıqda silinə bilər
// Silinib-silmədiyini yoxlamaq
if (weakRef.get() == null) { 
    // Obyekt silinib
}

Fantom Referans (Phantom Reference)

Fantom referans, ReferenceQueue ilə birlikdə istifadə olunur və obyekt tamamilə silinməzdən əvvəl müəyyən əməliyyatların həyata keçirilməsinə imkan verir. get() hər zaman null qaytarır.

import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;

// İzləniləcək obyekt
Object resource = new Object(); 
ReferenceQueue<Object> referenceQueue = new ReferenceQueue<>(); 
// Fantom referans yaradılır və növbəyə bağlanır
PhantomReference<Object> phantomRef = new PhantomReference<>(resource, referenceQueue); 

// Bu növbəni izləmək üçün ayrıca thread istifadə oluna bilər
// Obyekt silinməyə hazır olduqda, fantom referans növbəyə daxil olur

Xüsusiyyətlər və müqayisə:

Referans Növü Yaddaş idarəedicisi get() ilə obyektə çatmaq İstifadə sahəsi
Güclü Referans Yox Bəli Adi istifadə
Yumuşaq Referans Ola bilər Bəli (əgər silinməyibsə) Keş üçün, yaddaş azaldıqda silinə bilər
Zayıf Referans Ola bilər Bəli (əgər silinməyibsə) Keş üçün, güclü referanslar yoxdursa
Fantom Referans Ola bilər Xeyr (həmişə null) Resursların təmizlənməsi üçün, ReferenceQueue ilə