Java 为什么我的应用程序的堆内存比其他应用程序少?

Java 为什么我的应用程序的堆内存比其他应用程序少?,java,android,memory-management,Java,Android,Memory Management,我的问题可能看起来很幼稚,但我不知道如何更正确地表述它。问题是我在应用程序中创建并使用大型简单类型数组。我得到的错误如下: ERROR/dalvikvm-heap(1763): Out of memory on a 7907344-byte allocation. 是的,它足够大,但任务管理工具声称我的应用程序只使用30MB内存,而其他应用程序同时使用50MB甚至110MB(我见过一次),系统中仍然有190MB的可用内存(不是系统应用程序,只是我安装的其他普通应用程序)。如果所有应用程序在启动

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

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

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

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

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

要获得更多帮助,请运行 java-X

示例:java-Xms20m-xMX100m-cp。梅因


祝你好运。

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


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

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

这是每个设备上Dalvik VM的一个属性,您无法更改(无需从源代码重建Android)

您可以查询“每个应用程序内存类”,它似乎是一个与堆大小并非完全无关的数字

应用程序可以使用不在堆上的内存,但100+MB似乎是一个惊人的大容量


如果你想了解Android上的内存使用情况,你最好的办法莫过于谷歌的Android开发者之一。简而言之,它说分析内存使用是非常困难的,你应该用一小撮盐来计算你所有的数据。

可能是找到足够大的连续内存的问题。你为什么要首先分配这么多?让我猜猜:非缓冲流我用它在画布上绘制位图。原因是位图是在JNI访问的本机代码中生成并不断更改的。