从Android Studio级别运行应用程序时,如何在设备上分配超过192MB的内存?
我创建了一个简单的应用程序,可以在比较中执行矩阵向量乘法。我正在通过Android Studio在我的Nexus 5上运行应用程序,但内存速度非常快。可分配的矩阵的最大大小约为短整数类型的[9000] x [9000]。这大约有162MB,所以它不应该太多,因为设备有大约650MB的可用内存。然而,由于Android Studio内存监视器仅显示如此高度的图表(如下面的屏幕截图所示),因此应用程序崩溃时,OOM的容量为192MB,这似乎是某种限制。
无限内存(达到设备限制级别)将是完美的。有机会实现这个目标吗?
答案 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分配更多内存。如果您以这种方式请求,设备制造商无需为您的应用提供更多内存,但它可能会。但是,这很可能不会接近设备内存限制。
请注意,用户会对行为不端的开发人员感到非常恼火,例如分配过多的内存,损害用户的利益。使用其他应用程序。