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 设备内存限制的主要内容,如果未能解决你的问题,请参考以下文章

6.0Android Studio性能优化工具

Android内存优化相关

Android进程间通信详细介绍

Android内存优化-2-OOM研究

Android Studio和MAT结合使用来分析内存问题

在 cuda 中使用静态分配的内存时的全局设备内存大小限制