我的问题可能看起来很幼稚,但我不知道如何更正确地表达它。问题是我在我的应用程序中创建并使用大型简单类型数组。我得到的错误如下:
ERROR/dalvikvm-heap(1763): Out of memory on a 7907344-byte allocation.
是的,它足够大但是任务管理工具声称我的应用程序仅使用30MB内存,而其他同时使用50MB甚至110MB(已经看过一次)并且系统中仍有190MB的可用内存(不是系统应用程序,只是我安装的其他普通应用程序)。如果所有应用程序在启动时都具有相同的堆大小,那么它们如何变得如此之大?
答案 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设置或配置堆大小。