2009-05-01 22 views
12

yaratılan nesnelerin parça sayısını Android'e bir oyun yüklüyorum (çok fazla kod var ve benimkinden çok azım) ve DalvikVM bana (LogCat aracılığıyla) çöp toplama hakkında her şeyi anlatıyor. Kodun bir noktasında, "GC serbest x nesneler/x ms" mesajlarının bir akışını alıyorum, temel olarak ~ 150.000 nesnenin silinmiş olduğunu ve tam bir saniye sürdüğünü bildiriyorum.Android:

Bunların nereden geldiğini bilmek istiyorum! Eminim ki bu kadar çok nesneyi kasıtlı olarak yaratmıyorum.

Yani, temel olarak bu mesajın tersini almanın bir yolu var mı? Herhangi bir nesne oluşturulduğunda bir günlük mesajı yazdırır bir şey?

Bu şekilde, kodun üzerinden geçebilir, kaç iletinin oluşturulduğunu kontrol edebilir ve kodun hangi bölümlerini oluşturduğunu görebilirsiniz. Bir nesnenin bir parçası olarak bir çeşit nesne yarattığından şüpheleniyorum, ama eğer mümkünse bu kesin bir şekilde anlatacaktı.

Eclipse 3.4.2 kullanıyorum, bu uygunsa.

Herhangi bir fikrin var mı?

+0

Bir nesnenin yeni bir örneğini oluşturduğunuzda, bir ileti kaydedemez misiniz? –

+0

Evet, ama _any_ nesnesi oluşturulduğunda bir mesaj yazmak istiyorum. Rect ya da Strings gibi bir şey. – mcccclean

cevap

3

Neden varolan oyun kodunu Sun JVM'de (bir Java oyununu taşıdığınızı varsayarsak) profillemiyorsunuz? Daha sonra JProfiler, Yourkit, vs.'den faydalanabilirsiniz ve ne kadar büyük nesneler temizlendiğini görebilirsiniz. (Kullanmak için GC'nin çalıştığını görmek için -XX: + PrintGCDetayları kullanın.)

Eğer oyunda olmadığı ortaya çıkıyorsa, bunu acısız bir şekilde çözdünüz ve dikkatinizi çekebilirsiniz. Android kodunuza Ve maalesef fazla bir şey bilmiyorum.

8

Bu, Android ile birlikte gelen ddms aracını kullanarak mümkündür (Eclipse sürümü değil). Bunu kullanarak, tahsis izleyici sekmesine bakın. Tüm nesnelerin tahsislerini, ayrıldıkları yere ait yığın izleriyle birlikte izlemeye başlayabilirsiniz. Bununla birlikte, bu araç bir bilgi akışı üretebilir ve istediğiniz belirli bilgiler her zaman ayrıştırmak veya bulmak kolay değildir. Sun JVM için bir versiyonunuz varsa, Kai'nin bahsettiği araçları kullanmanızı tavsiye ederim, çok daha gelişmişler. Android'de yapmanız gerekiyorsa, tahsis izleyiciyi kullanmak size bir başlangıç ​​verecektir.