Anlama'Referans sınıflar s Java: SoftReference, WeakReference ve PhantomReference
Biri üç Referans sınıflar arasındaki fark (ya da güzel bir açıklama için bir bağlantı sonrası)açıklayabilir? SoftReference
>WeakReference
>PhantomReference
, ama ne zaman her birini kullanmalıyım? Neden ama SoftHashMap
PhantomHashMap
WeakHashMap
var mı?
Ve eğer aşağıdaki kodu kullanıyorum
WeakReference<String> ref = new WeakReference<String>("Hello!");
if (ref != null) { // ref can get collected at any time...
System.gc(); // Let's assume ref gets collected here.
System.out.println(ref.get()); // Now what?!
}
...ne olur? EÄŸer ref
önce boş olduğunu kontrol etmek için her deyimi (bu yanlış, ama ne yaparımgerekirBence öyle)? Hızlı-ateş soru için özür dilerim, ama sorun Reference
bu dersleri anlamakta güçlük çekiyorum... Teşekkürler!
CEVAP
Java kütüphanesi documentation for the java.lang.ref
package üç açık referans türleri azalan gücünü karakterize.
Başvurulan nesne ana bilgisayar işlemi için bellek yetersiz kadar hayatta kalmak istediğinizde SoftReference
kullanın. Nesne toplayıcısı kadar toplama için uygun olmayacaktırihtiyacı varbelleği boşaltmak için. Gevşek bir şekilde ifade etti, SoftReference
aracı bağlama, duruma gelene kadar "nesne artık." Pın
Buna karşılık, başvurulan nesnenin ömür boyu etkilemek istemediğin zaman WeakReference
kullanın; eğer sadece ayrı bir onaylama işlemi yapmak istiyorumhakkındabaşvurulan bir nesne, canlı kaldığı sürece. Nesneye bağlı varlığı etkilenmez koleksiyonu için uygunluk WeakReference
ler. Sanki bir dış eşleme nesne örneği ile ilgili mülkiyet, mülk gereken tek kaydı olarak ilgili nesne hayatta, iyi bir kullanım için WeakReference
s WeakHashMap
.
Karakterize etmek için bir—PhantomReference
—son daha zor. WeakReference
, PhantomReference
böyle bir sınır başvurulan nesnenin ömrü üzerinde hiç bir etkisi oluyor gibi. Ama diğer başvuru türleri farklı, hatta PhantomReference
bir başvuru yapabilirsiniz. Bir anlamda, için, arayanlar, bildiğimiz işaret ettiği şeye işaret etmez. Sadece bir sonraki kontrol edilebilir başvurulan nesne -- verileri ile ilgili bazı verileri ilişkilendirmek için izin verir ve PhantomReference
ReferenceQueue
ilgili sıraya geldiğinde üzerine harekete geçti. Normalde PhantomReference
bir tür türemiş ve türetilmiş yazın bazı ek veri içerir. Ne yazık ki, bazı downcasting böyle türetilmiş bir tür kullanmak için var.
Örnek kodunuzda ref
baÅŸvuru deÄŸil (veya eÄŸer tercih ederseniz, "") deÄŸeri boÅŸ olabilir. Bunun yerine, deÄŸeri boÅŸ olabilir Reference#get()
çağırarak elde değil. Null olması bulunursa, çok geç kaldın; başvurulan bir nesne zaten toplanmış olma yolunda
final String val = ref.get();
if (null != val)
{
// "val" is now pinned strongly.
}
else
{
// "val" is already ready to be collected.
}
Referans bu sembol, PHP Ne anlama geli...
Referans - bu hata PHP Ne anlama geliy...
Yumuşak bir referans ve Java zayıf bir...
Java Statik Sınıflar...
Java Birden Fazla Sınıflar İle Joker K...