Burak / Kutbay
Menü

Java’da Referans Türleri (Strong, Phantom, Soft, Weak Reference )

281 kelime · 2 dk okuma

Bu yazıda

Java Referans Türleri nasıl kullanılır. Java referans türleri amacı nesnelerimizin Garbage Collectorun kontrol edeceğine müdahale etmemize olanak tanır.

Bu sayfada
  1. Referans Türleri
  2. Strong Reference
  3. Soft Reference
  4. Weak Reference
  5. Phantom Reference
  6. İlgili Java ve geliştirme içerikleri
  7. İlgili Java içerikleri
Java’da Referans Türleri (Strong, Phantom, Soft, Weak Reference ) görseli
FIG_001 · Java'da Referans Türleri (Strong, Phantom, Soft, Weak Reference )

Bu yazıda Java’da Referans Türlerinin ne olduğuna ve nasıl kullanıldığına bakacağız.

Java’daki referans türleri olmasının amacı nesnelerimizin Garbage Collectorun nasıl kontrol edeceğine müdahale etmemize olanak tanır.

Referans Türleri

Strong Reference

Hepimizin sıklıkla kullandığı referans türüdür.

Java
Student student = new Student();Code language: Java (java)

Garbage collector bu nesne null olmadığı sürece hiç bir zaman temizleyemez.

Soft Reference

Bellek yetersizliği durumunda garbage collector tarafından toplanabilecek referans türüdür. Bellek rahatsa, nesne bellekte kalmaya devam eder.

Java
Student student = new Student();
SoftReference<Student> softReference = new SoftReference<>(student);Code language: Java (java)

Oluşturduğumuz nesnemizi softreference olarak tanımladık.

Java
student = null;Code language: Java (java)

Eğer bellekte yer varsa aşağıdaki kod ile nesneye tekrar ulaşabilmemiz mümkün olmaktadır.

Java
System.out.println(softReference.get());Code language: Java (java)

Weak Reference

Nesnenin bir sonraki çöp toplama işleminde toplanmasına izin veren bir referans türüdür. Bellek yetersizliği olmasa bile nesne toplanabilir.

Java
Student student = new Student();

WeakReference<Student> weakReference = new WeakReference<>(student);Code language: Java (java)

Nesnemizi weakreference olarak tanımladık. Şimdi yine null değer verdikten GC yi sonra çağıralım.

Java
student = null;
System.gc();Code language: Java (java)

GC çalıştığında, zayıf referans artık nesneye erişim sağlayamaz.

Java
Student retrievedStudent = weakRef.get();Code language: Java (java)

Phantom Reference

Nesne bellekten temizlenmeden önce yapılması gereken işlemler için kullanılır. Ancak, bu referans ile nesneye doğrudan erişim mümkün değildir. En zayıf referans türüdür. Phantom Reference kullanılırken ReferenceQueue ile birlikte kullanmak gerekmektedir. Kaldırma işlemi için bir ReferenceQueue pool’a eklenir ve bu kuyruktan takibini yapabiliriz.

Java
ReferenceQueue<Student> refQueue = new ReferenceQueue<>();

Studentstudent = new Student();
PhantomReference<Student> phantomRef = new PhantomReference<>(student, refQueue);Code language: Java (java)

Tanımlamızı yaptık ve nesnemize null değer atayalım.

Java
student = null;
System.gc();Code language: Java (java)

Unutmamamız gereken bir yer nesnemiz ReferenceQueue ya eklendiği için phantomRef.get() her zaman null döner.

Java
Student retrievedStudent = phantomRef.get();Code language: Java (java)

İlgili Java ve geliştirme içerikleri

Java concurrency, Java multithreading, Java Record ve Spring Boot dersleri konularına da göz atabilirsiniz.

İlgili Java içerikleri

Java konularını tamamlamak için Java multithreading, Java Record ve Spring Boot Dersleri rehberlerini inceleyebilirsiniz.

Etiketler · 5

Yorum yaz

E-posta adresin yayımlanmaz. Zorunlu alanlar * ile işaretli.