2012-01-09 14 views
6

Uygulamam, kullanacağını düşündüğümden çok daha fazla bellek kullanıyor ve hangi sınıfın büyük miktarda bellek kullandığını anlamaya çalışıyorum. Belki de onu serbest bırakmamak.Java VisualVM bellek örnekleyici - belirli bir sınıfın boyutunu alma

VisualVM kullanıyorum ve bellek örnekleyicide belleğin çoğunun Chars, Strings ve Bytes'te harcandığını görebiliyorum, tüm sınıfları Strings kullanıyor, ancak VisualVM'in bildiğiniz gibi ALL Chars ve Strings'i sistemi (tüm Chars, kimin tuttuğunu anlamak zor kılan Dizeler ile aynıdır), , bu dizeleri tutan dizelerin büyüklüğünü anladığı gibi, dizeler olmadan hesaplanır.

Bu araçta, "Gerçek" en büyük sınıflar olan tüm bu dizeleri tutanlar nasıl görebilirim? (tercihen bu sınıflardan Dizeleri'ne ulaşabilirsem ve başka bir şekilde olmasaydı) "En yakın GC’ye root’u yığın yığınında kullanmayı denedim ama yaklaşık 4.000.000 Dizgim var" "olanlar çok küçüktür ...

Teşekkürler!

+0

Sanırım hangi sınıfın ne kadar bellek kullandığını söyleyemezsiniz. Başka bir sınıfın nesnesini farklı bir sınıfta örnekliyorsanız, bunun hakkında nasıl düşünürsünüz? Ayrıca bildiğim kadarıyla bir sınıf tabanlı miyazi kullanımı elde edemezsiniz. – Johnydep

cevap

2

Yığın dökümü yaparsanız, en büyük 20 nesneyi (referans aldığı tüm alan dahil) bulabilirsiniz. Daha fazla bir şey için, çok güçlü olan OQL konsolunu kullanmanızı tavsiye ederim.

Temel olarak, aşağıdaki arıyor: Ben rastgele bir dize almak teklif

Lot of String's taking up 20Mb 
    --- kept alive by ---> 
HashSet#28839 
    --- kept alive by ---> 
MyOwnClass#88293 

, bu referrees oluyor bulmak ve Olası bir şüpheli bulana kadar bu analiz edin. Bu şüpheli varsa, bu nesnelerin toplam boyutunu öğrenmek için http://visualvm.java.net/oqlhelp.html#rsizeof kullanarak bir OQL sorgusu yapabilirsiniz.

+0

Teşekkürler! Bunu şimdi deneyeceğim, umarım bu yöntemi kullanarak bir şey bulabilirim. – aye

+0

Merhaba, Belirli bir büyük örneği nasıl bulabilirim biliyor musunuz? En büyük 4,000,000 Dizgiyi görüyorum ancak en büyük özel örnekleri göremiyorum. – aye

+0

Sınıflarınızın görünümünde, dizenin en çok bayta [%] sahip olduğunu belirttiği yığın dökümü var. Bunu ikiye katlarsınız, bu da sizi Örnekler görünümüne yönlendirir. Burada, belirli bir örneği seçebilir ve alt bölmedeki referansları takip edebilirsiniz. – parasietje

2

Bir yığın dökümü yapın, MAT ile açın ve en büyük Tutulan Boyutlar için histograma bakın.

+0

Yardımlarınız için teşekkürler :) – aye

+0

VisualVM ile de aynısını yapabilirsiniz. –

İlgili konular