Javada normal tanımladığın değişkenlerin tipleri strong reference (Türkçesine sağlam referans diyeyim (: ) oluyor. Örneğin:
Integer x;
Vector y;
Bunlar strong referance tipleri. Anlamı ne oluyor? Bir instance (sınıf-örneği) bir strong referance tarafından gösterliliyorsa bu instance çalışan ya da çalışacak olan GC (garbage-collector) tarafından temizlenemez, biryerlerde kullanılıyor anlamına gelir.
Weak referance ise aşağıdaki gibi tanımlanıyor.
WeakReference<StringBuilder> weakBuilder = new WeakReference<StringBuilder>(builder);
GC çalıştığı zaman bu instance hafızadan temizlenebiliyor. Bir yerden gösterilmesi bir sorun teşgil etmiyor. Bu weak referance kendi içinde ikiye ayrılıyor. Birisi soft diğeri de phantom refenrance. Anladığım kadarıyla soft = weak oluyor. Yani Soft demek direk weak demek. Bu tarz referance sahibi olan instance GC çalıştığı zaman siliniyor.
Phantom referance ise genelde hiç kullanılamıyormuş. Enteresan bir bilgi. Genel kullanım amacı olarak birşeyleri tetikleyip zamanlamasını almak gibi bir öneri var. Pratikte nasıl kullanırız pek emin olamadım.
Soft/weak referance için ise cache (önbellek) içine alabileceğimiz bilgiler için uygundur gibi görünüyor. Zaten GC çalıştığı zaman kendiliğinden hafızadan temizlenecek, bilgiler yeniden önbelleğe alınabilir.
İyi çalışmalar.