2012-04-23 139 views
2

Im在Android的Mono中存在垃圾收集器問題,我正在研究它,並說我必須在每個OnDestroy()方法中手動GC.Collect()以釋放對象即時消息不使用,也即時嘗試使用Dispose for Java.Lang.Objects,但該應用程序仍然cosuming和增加內存。我如何解決它?Mono for Android內存泄漏

+0

你能提供更多關於你的研究的信息嗎? – 2012-04-23 15:57:47

+0

我可以提供一些鏈接,即時通訊引用相同的問題 – arkmetal 2012-04-23 16:03:44

+0

http://docs.xamarin.com/android/advanced_topics/garbage_collection#Helping_the_GC – arkmetal 2012-04-23 16:04:02

回答

6

主要問題:這是一個實際問題嗎?垃圾收集器在本質上是非確定性的,所以內存使用情況會有所不同。這不一定是個問題;這只是事情的一部分。如果您經常耗盡全局引用或耗盡進程堆,那麼這是一個問題。如果你只是看到grefs在增加,但當收集自然發生時會減少,這可能不值得擔心。

如果這是一個問題,我們需要具體解決問題。例如,Bitmap實例可以很容易地exhaust memorysolutions for Bitmaps不一定適用於所有的一般情況。

要獲得更多信息,您可以啓用Global Reference Messages來查看何時創建和銷燬全局引用。

此外,我們不斷更新GC啓發式。適用於Android 4.1.0的Mono引入了一個更改,其中GC.Collet()在達到該平臺的最大gref值的80%(模擬器上的1800個grefs)的gref閾值後自動調用。這應該消除OnDestroy()需要撥打GC.Collect()的大部分需求,儘管(一如既往)GC可能會在「不合時宜」的時刻啓動,所以無論如何明確GC.Collect()可能是優選的。