2016-03-30 24 views
1

Şu anda bir Object'te kaç tane referans bulunduğunu görmek mümkün mü? Ben Map.Entry örnekleri onların Map dışındaki referanslar saklanan, bu yüzden onlara ihtiyacım doğrudan sürekli anahtarına haritalama kontrol etmeden değerlerini erişmek nerede onları tutabilir
Çalışma zamanında bir Object ile ilgili başvuruların miktarını alın

Durum.

Başvuruların güncellenmesi için güncelleştirmenin Map olarak değiştirilmesini istiyorum. Map.get(key) kullanıyorsam olmaz.

o ancak ... bir Entry kaldırılırsa, yine referanslarda var olabileceği
hala değerini dönecekti hangi sorunlar var. Yine de, asla kaldırmayı seçemedim, ancak üstesinden gelmek için onları null'a ayarladım.

Ancak, tarihler gibi kullanılan geçici bir çok benzersiz anahtar varsa, yukarıdakilerin bellekte çok fazla miktarda null girişle doldurulacağından endişeleniyorum. o zaman başka hiçbir referanslar vardır anlamı, Map içinde biri olacağını, 1 olamayacaklarını, değeri null ile Map.Entry yapılan atıflar miktarını almak için bir yol olup olmadığını

ben çok düşündüm Entry'u kaldırmak güvenlidir. Ve aksi takdirde, başka referanslar varsa, kalmalıdır ve hala null'a dönmelidir.

Böyle bir olasılık var mıdır?

+0

icat Are çöp toplayıcı mı? –

+0

"Büyük miktarda null ile doldurulacak bellek" ile ne demek istiyorsun? –

+0

@Sleiman Map.Entry nesnesi, değeri – Myst

cevap

2

Java bellek yönetimi bu şekilde çalışmıyor. Hiçbir şey bir nesneye yapılan referansların sayısını tutmaz.

Gerçek probleminiz, nesnelerinizin yaşam döngüsü hakkında iyi bir modelinizin olmaması gibi geliyor. Bir şey Map.Entry nesnesini alıp, aksi halde toplandıklarında ötesindeki referanslara dayanıyorsa, , sızıntının bulunduğu. Muhtemelen bir bellek uzmanı kullanmalısınız (bu amaçla yararlı YourKit buldum, ancak başkaları var) hafızayı dolduran şeyi belirlemek için.

Onlar C# değil, Java üzereyiz, ama bunlar blog yayınlarında noktaları yanı durumunuza geçerlidir: Eğer

+0

Soruyu yanlış anlamış olabilir misiniz? Bellek sızıntıları/çöp toplama ile ilgili değildir. – Myst

+0

Girişlere başvurmaktan kaçınmanızı ve istediğimi elde etmenin başka bir yolunu bulmanızı öneririz. – Myst

+1

@Myst: Sorunuz bir şekilde belirsizdir ve yanlış anlaşılmış olabilir. Ama esasen cevabımın yanında duruyorum: Problemin, nesnelerinizin yaşam döngüsü hakkında iyi bir modeliniz olmadığı anlaşılıyor. Uygulamanızın beklenenden daha fazla bellek kullandığını tespit ederseniz, neler olduğunu anlamak için kesinlikle bir bellek uzmanı kullanırdım. Doğru çözüm hakkında bir karar vermenize yardımcı olabilmemiz için, sorunla ilgili daha fazla veri sağlamanız gerekir, ancak "referansların miktarını elde etme" ye dayanan herhangi bir şeyin yanlış çözüm olduğundan eminim. –