2014-10-04 42 views
8

最近,我從100 MB減少我的應用程序的最大內存峯值爲45 MB,我很好奇什麼是使用了Android的缺點:largeHeap =「真」 潛力其他推其他應用程序進行的記憶?例如,如果大小不足以證明推送其他應用程序是不合適的,例如,如果您的應用程序僅在會議中使用了四天才會發生崩潰,則會導致災難性後果?或者還有其他一些我正在看的過去?使用android有什麼缺點:largeHeap =「true」?

回答

4

從我的理解,這一切真的會做的是讓你的應用程序更高的內存限制 - 在largeHeap尺寸設備之間的區別的,所以你不能保證的額外內存的特定量。我們將其用於我們的應用之一,因爲它將是設備上唯一運行的應用程序。

3

由於this training guide指出,

「使用額外的內存會越來越多地以整體用戶體驗的損害,因爲垃圾回收將需要更長的時間,當任務切換系統性能可能會較慢或執行其他常見操作。「

我認爲這是一個非常有效的問題,讓我補充一些額外的解釋。

1)較長的垃圾收集時間

很難衡量有多少額外的時間將採取更大的堆。因爲很多事情都會影響垃圾收集時間。使用哪個Android運行時(Dalvik或ART)影響垃圾收集時間(您可以在here上查看更多內容)。垃圾收集在different Android version上執行的方式也不同。但可以肯定的是,較大的堆會使垃圾收集耗時更長。因爲垃圾收集器基本上必須遍歷整個活動的對象集合。如果您好奇,可以在2011 Google I/O的Memory management for Android Apps會話中瞭解有關此主題的更多信息。正如本次會議的幻燈片所述,垃圾收集暫停時間大約爲5毫秒。你可能會認爲幾毫秒不是什麼大不了的事,但是每一毫秒都算。 Android設備必須每隔16 ms更新其屏幕,並且更長的GC時間可能會將幀處理時間延長至16毫秒的屏障,這可能會導致可見的掛接。

2)慢任務切換

至於解釋here

系統可以殺死在LRU緩存中最近最少使用的過程中開始的流程,還給予一定的考慮朝哪些進程的內存密集度最高。

所以如果你使用更大的堆,你的過程將更有可能被當它轉到後臺運行,這意味着它可能需要更長的時間,當用戶想要從其他應用程序到您的切換殺害。當進程處於前臺時,後臺進程將更有可能被踢出,因爲你的應用需要更大的內存。這意味着從您的應用切換到其他應用也需要更長的時間。這顯然對用戶不利。