我一直聽說Android應用程序應該嘗試限制創建的對象的數量,以減少垃圾收集器的工作量。這是有道理的,你可能不想創建大量的對象來跟蹤有限的內存佔用,例如在傳統的服務器應用程序創建100,000個對象在幾秒鐘內不會聞所未聞。由於Android GC性能改變了編碼風格,有多遠?
問題是我應該採取多遠?我已經看到很多Android應用程序依賴靜態狀態的例子,據稱這些應用程序「加快速度」。將需要從幾十個垃圾收集到幾百個垃圾的實例數量增加是否真的有很大的不同?我可以想象改變我的編碼風格,現在創建了成千上萬的對象,就像你可能在成熟的Java-EE服務器上創建的那樣,但是依賴一堆靜態來(據說)減少了垃圾收集對象的數量奇。
有多少是真的有必要改變你的編碼風格,以創造業績Android應用?
我也想補充一點,你會經常發現適用於臺式機或服務器這是原始書面的Java代碼,是非常低效的,並通過一噸的對象相比,它的工作量鞭打。例如,我看到網絡代碼在處理來自網絡的數據時不斷導致GC。如果你的代碼是這樣做的,你應該看看優化它,不是因爲Dalvik,而是因爲它不適合移動設備 - 所有額外的工作都直接來自電池。 – hackbod 2010-04-08 05:29:35
關於風格應該改變多少,我認爲最好的方法是編寫可以工作的代碼(並且儘可能重複使用已分配的對象,儘管如此,儘管如此),然後查看是否存在GC上的任何壓力。如果有,那麼開始記憶分析你的代碼並尋找你可以避免分配和刪除變量的地方。 – 2012-02-07 10:18:15