Android Studio 设备内存限制
Posted
技术标签:
【中文标题】Android Studio 设备内存限制【英文标题】:Android Studio device memory limit 【发布时间】:2016-12-09 00:27:54 【问题描述】:问题:
从 android Studio 级别运行应用程序时,如何在设备上分配超过 192MB 的内存?
说明:
我创建了一个简单的应用程序,该应用程序执行矩阵向量乘法以进行比较。我正在通过 Android Studio 在我的 Nexus 5 上运行应用程序,但它很快就会耗尽内存。可以分配的最大矩阵大小约为 [9000]x[9000] 短整数类型。这提供了大约 162MB,所以它不应该太多,因为设备有大约 650MB 的可用内存。然而,应用程序在 192MB 时会因 OOM 而崩溃,这似乎是某种限制,因为 Android Studio 内存监视器仅显示这种高度的图表(如下图所示)。
无限内存(最高设备限制级别)将是完美的。有机会实现吗?
【问题讨论】:
【参考方案1】:这提供了大约 162MB,所以它不应该太多,因为设备有大约 650MB 的可用内存
设备内存不是您的问题。您的问题是使用 Dalvik/ART 的 Android 应用程序(换句话说,使用 Java 编写的应用程序)具有堆限制。这个限制可能低至 16MB,但现在更高的值更常见。
但是应用程序在 192MB 时会因 OOM 而崩溃
如果您的堆限制为 192MB,则您拥有相当高端的设备;大多数设备不会有这么高的堆限制。
无限内存(最高设备限制级别)将是完美的。有机会实现吗?
学习 C/C++,然后使用它编写您的矢量代码。本机代码最多可以分配设备限制。
或者,正如 Redshirt 所说,您也许可以在清单中使用 android:largeHeap="true"
on your <application>
element 分配更多内存。如果您以这种方式请求,设备制造商不需要为您的应用程序提供更多内存,但它可能会。但是,这很可能不会接近设备内存限制。
请注意,开发者的不当行为会让用户非常恼火,例如分配过多内存、损害用户对其他应用的使用。
【讨论】:
【参考方案2】:内存限制是由设备而不是 Android Studio 设置的。绕过这个限制的唯一方法是在你的清单中添加android:largeHeap=true
,但除非开发人员知道他们在做什么,否则它会被严重反对。
某些设备可供应用使用的空间远少于 192MB,因此您甚至不能依赖 192MB。
【讨论】:
以上是关于Android Studio 设备内存限制的主要内容,如果未能解决你的问题,请参考以下文章