2014-10-04 92 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缓存中最近最少使用的过程中开始的流程,还给予一定的考虑朝哪些进程的内存密集度最高。

所以如果你使用更大的堆,你的过程将更有可能被当它转到后台运行,这意味着它可能需要更长的时间,当用户想要从其他应用程序到您的切换杀害。当进程处于前台时,后台进程将更有可能被踢出,因为你的应用需要更大的内存。这意味着从您的应用切换到其他应用也需要更长的时间。这显然对用户不利。