为什么我的应用程序堆内存少于其他应用程序

时间:2010-11-18 15:58:03

标签: java android memory-management

我的问题可能看起来很幼稚,但我不知道如何更正确地表达它。问题是我在我的应用程序中创建并使用大型简单类型数组。我得到的错误如下:

ERROR/dalvikvm-heap(1763): Out of memory on a 7907344-byte allocation.

是的,它足够大但是任务管理工具声称我的应用程序仅使用30MB内存,而其他同时使用50MB甚至110MB(已经看过一次)并且系统中仍有190MB的可用内存(不是系统应用程序,只是我安装的其他普通应用程序)。如果所有应用程序在启动时都具有相同的堆大小,那么它们如何变得如此之大?

3 个答案:

答案 0 :(得分:4)

Android应用程序的最大堆大小取决于它运行的设备。对于早期设备,最大堆大小为16MB,但对于某些后续设备,它可以是24MB,甚至可能是32MB。

这是Dalvik VM在每台设备上的属性,并不是您可以更改的内容(无需从源代码重建Android)。

您可以使用ActivityManager.getMemoryClass()查询“每应用程序内存类”,这似乎是与堆大小不完全无关的数字。

应用程序可以使用不在堆上的内存,但100 + MB似乎是一个非常大的数量。

如果您想了解有关分析Android上的内存使用情况的信息,那么您不能比this Stack Overflow answer by Dianne Hackborn更好,后者是Google的Android开发人员之一。简而言之,它说分析内存使用是非常困难的,你应该用一点盐来获取任何数字。

答案 1 :(得分:-1)

您是否尝试配置堆大小?使用以下选项执行此操作。

-Xms设置初始Java堆大小  -Xmx设置最大Java堆大小

获得更多帮助 java -X

示例:java -Xms20m -xMX100m -cp。 MyMain

祝你好运。

答案 2 :(得分:-1)

我们都知道java默认具有垃圾收集器系统,但在某种程度上我们需要清除或刷新一些对象。

您还可以为JVM设置或配置堆大小。