2013-04-08 73 views
4

我在模擬器上測試應用程序的內存使用情況。問題是,在模擬器上,應用程序堆只是在增長和增長,只是一點點的資源被釋放。如果沒有收集,則會在大分辨率屏幕上導致OutOfMemory異常。Android設備與模擬器的垃圾回收器行爲差異

我下載了Sony SDK,並且Xperia Z有一個模擬器配置,其分辨率爲1080x1920,默認堆爲64MB。我認爲這是一個小的堆大小的分辨率,因爲我的應用程序只使用40MB啓動。但是在我的手機上,它使用了15MB的64MB(分辨率爲540x960)。 所以這個相當小的堆大小(可能不是真實的?)+ GC行爲導致OutOfMemory相當快。

在真實的設備上(我只測試過我的),GC工作得非常好,它釋放了不再使用的資源,但我真的無法預測它是否可以在其他手機上工作。

我應該忽略GC如何在我的模擬器上工作,或者它可能是我的應用程序的問題?

回答

0

模擬器上增長的堆表明在某些時候你有內存泄漏。

當您在不同應用程序之間發送意圖時(例如,從圖庫中選擇圖像),它們非常普遍。大多數設備可以處理這種泄漏,沒有任何問題。

堆長大的另一個原因是:內存操作效率低下。這意味着在某些時候你需要大量的內存(例如,你從庫中選擇了5M圖像,爲它創建了內存並保存爲位圖,所以你問15 + M模擬器會顯示出堆的增長,但大多數設備會顯示錯誤)。

如果您看到堆增長 - 分析您的內存使用情況並檢測泄漏。 Link
如果你沒有發現任何奇怪的東西,你幾乎可以安全地忽略堆警告。

注:堆顯示提供的空間,未使用。