Diğer iş parçacıkları tarafından artık başvurulmadığında, kapatılabilir nesneyi düzgün şekilde kapatmak istiyorum.ReferenceQueue ve WeakReference'ı Kullanma
Bazı küçük sınamalar yazdım, ancak nesne aktarıldıktan sonra get yönteminin null değerine dönüşmesi, yani yoklama yöntemi, başvurusu olmayan uygun Object'i döndürür.
public static void main(String[] args)
{
ReferenceQueue<Closeable> reaped = new ReferenceQueue<Closeable>();
Closeable s = <SOME CLOSEABLE IMPL>;
WeakReference<Closeable> ws = new WeakReference<Closeable>(s, reaped);
s = null;
System.gc();
Closeable ro = (Closeable)reaped.poll().get();
ro.close();
}
Şimdiden teşekkürler. Herhangi bir yardım takdir edilecektir.
Merhaba sayesinde uygulamak sizin için kapalıdır, bu Lucene IndexSearcher hakkındaki bu. – yan
Sadece denedim, System.gc() 'den sonra ReferenceQueue boyutu sıfırdır – yan
@yan, nesnelerin JVM'den çıkarken bile System.gc() 'den sonra GC'leri alacağının bir garantisi yoktur. iş mantığınız için kesinleştirme kullanmayın.Yalnızca önbellekleme ve (sonuçta) kaynak sızıntılarını önleme gibi özel amaçlar için vardır.İmzalama –