Android Studio设备内存限制

时间:2016-12-09 00:27:55

标签: android performance android-studio memory

问题:

从Android Studio级别运行应用程序时,如何在设备上分配超过192MB的内存?

描述:

我创建了一个简单的应用程序,可以在比较中执行矩阵向量乘法。我正在通过Android Studio在我的Nexus 5上运行应用程序,但内存速度非常快。可分配的矩阵的最大大小约为短整数类型的[9000] x [9000]。这大约有162MB,所以它不应该太多,因为设备有大约650MB的可用内存。然而,由于Android Studio内存监视器仅显示如此高度的图表(如下面的屏幕截图所示),因此应用程序崩溃时,OOM的容量为192MB,这似乎是某种限制。

无限内存(达到设备限制级别)将是完美的。有机会实现这个目标吗?

naughty_limit

2 个答案:

答案 0 :(得分:2)

内存限制由设备而非Android Studio设置。解决此限制的唯一方法是在清单中添加android:largeHeap=true,但除非开发人员知道他们在做什么,否则会严重不满。

某些设备的应用程序可用量远低于192MB,因此您甚至无法依赖192MB。

答案 1 :(得分:2)

  

这大约有162MB,所以它不应该太多,因为设备有大约650MB的可用内存

设备内存不是你的问题。您的问题是使用Dalvik / ART的Android应用程序 - 换句话说,使用Java编写的应用程序 - 具有堆限制。这个限制可能低至16MB,但现在更高的值更常见。

  

然而,应用程序崩溃与OOM的192MB

如果您的堆限制为192MB,则您拥有相当高端的设备;大多数设备的堆限制都不会高。

  

无限内存(达到设备限制级别)将是完美的。有机会实现这个目标吗?

学习C / C ++,然后使用它编写矢量代码。本机代码最多可以分配设备限制。

或者,正如Redshirt所说,可能能够使用清单中的android:largeHeap="true" on your <application> element分配更多内存。如果您以这种方式请求,设备制造商无需为您的应用提供更多内存,但它可能会。但是,这很可能不会接近设备内存限制。

请注意,用户会对行为不端的开发人员感到非常恼火,例如分配过多的内存,损害用户的利益。使用其他应用程序。