Sobes.tech
Middle

Java'da qanday turdagi havolalar mavjud va ularning xususiyatlari qanday?

sobes.tech AI

AIdan javob

Java'da, çöp toplayıcı davranışına göre fərqli olan üç əsas referans növü (referans dəyişənləri) mövcuddur:

  • Güclü Referans (Strong Reference)
  • Yumşaq Referans (Soft Reference)
  • Zəif Referans (Weak Reference)
  • Fantom Referans (Phantom Reference)

Güclü Referans (Strong Reference)

Bu, ən çox istifadə olunan referans növüdür. Güclü referansın göstərdiyi obyekt, ən azı bir güclü referans mövcud olduğu müddətcə toplayıcı tərəfindən silinməz.

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

Yumşaq Referans (Soft Reference)

Yumşaq referans, JVM yaddaş ehtiyac duyarsa, toplayıcı tərəfindən silinə biləcək obyektə işarə edir. Yalnız yumşaq referanslarla göstərilən obyektlər, JVM təcili yaddaş boşaltması tələb etmədiyi müddətcə toplanmaz. Çox vaxt keşik üçün istifadə olunur.

import java.lang.ref.SoftReference;

// Obyekt yaradılması
Object data = new Object(); 
// Objekti yumşaq referansla göstərmək
SoftReference<Object> softRef = new SoftReference<>(data); 

// Yaddaş çatışmazsa obyekt toplana bilər
// Əgər obyekt toplanmayıbsa, geri alınabilir
Object retrievedData = softRef.get(); 

Zəif Referans (Weak Reference)

Zəif referans, ona güclü referans qalmadığı halda, istənilən vaxt toplanacaq obyektə işarə edir. Zəif referanslar, yaddaş azlığı zamanı obyektlərin silinməsi üçün istifadə olunur.

import java.lang.ref.WeakReference;

// Obyekt yaradılması
Object cacheEntry = new Object(); 
// Objekti zəif referansla göstərmək
WeakReference<Object> weakRef = new WeakReference<>(cacheEntry); 

// cacheEntry obyekti istənilən vaxt toplana bilər
// Obeyektin toplanıb-toplanmadığını yoxlamaq
if (weakRef.get() == null) { 
    // Obyekt toplanıb
}

Fantom Referans (Phantom Reference)

Fantom referans, ReferenceQueue ilə birlikdə istifadə olunur və obyekt tamamilə yaddaşdan silinməzdən əvvəl əməliyyatlar həyata keçirmək üçün istifadə edilir. get() ilə obyektə daxil olmaq mümkün deyil (null qaytarır). Xüsusilə resursların idarə olunması üçün istifadə olunur, bu resursların xüsusi təmizlənməsi tələb oluna bilər.

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

// İzləmə üçün obyekt yaradılması
Object resource = new Object(); 
ReferenceQueue<Object> referenceQueue = new ReferenceQueue<>(); 
// Fantom referans yaradılması və növbəyə bağlanması
PhantomReference<Object> phantomRef = new PhantomReference<>(resource, referenceQueue); 

// Ayrı bir iş parçacığında, referenceQueue izlənə bilər
// Resource obyekti tam silinməyə hazır olduqda, fantom referans növbədə görünəcək

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

Referans Növü Çöp toplayıcı get() ilə obyekt əldə edilə bilərmi İstifadə
Güclü Referans Yox Bəli Normal istifadə
Yumşaq Referans Toplaya bilər Bəli (əgər toplanmayıbsa) Keş (yaddaş azlığı zamanı)
Zəif Referans Toplaya bilər Bəli (əgər toplanmayıbsa) Keş (güclü referans yoxdursa)
Fantom Referans Toplaya bilər Yox (həmişə null) Resursların təmizlənməsi (ReferenceQueue ilə)