0

有时我的应用程序在模拟器中崩溃,说堆内存太低。这个堆是什么意思?我的应用程序使用本地数据库和 ksoap 服务。堆问题并非每次都发生。背后的原因是什么?

4

5 回答 5

5

堆是内存管理器用来跟踪内存的。它由一个或多个未使用的内存区域以及所有已用内存块组成。

当堆变得太低时,这意味着没有足够的可用内存,因为应用程序试图使用比可用内存更多的内存。这可能有几个具体原因,例如:

  • 您的应用程序使用了太多内存。

  • 其他应用程序正在使用大量内存,而为您的应用程序留下的内存更少。

  • 您的应用程序正在分配大块内存,但可用内存被分割成更小的块,因此无法使用。

尝试减少内存使用量,并确保正确释放不再使用的内存。

于 2013-04-19T11:51:57.090 回答
5

堆是您的应用程序在 RAM 中的 Dalvik 虚拟机中分配用于存储数据的空间量。

当您尝试加载太多东西以至于超出给您的堆空间时,您会遇到异常。

您可以通过仅加载您需要的内容来解决它,并在加载图像时缩小图像大小,这样您就不会加载比显示所需更大的尺寸。

于 2013-04-19T11:47:15.113 回答
2

在编程中,为运行时(即程序实际执行时)创建的数据保留的内存区域。相反,堆栈是用于存储数据的内存区域,其大小可以在程序编译时确定。

于 2013-04-19T11:47:40.457 回答
1

所有对象的静态变量都存储在堆上。dalvik 虚拟机将为每个应用程序分配一定数量的堆空间。当堆大小增长并且您的应用程序需要内存时,垃圾收集器会启动以释放内存。当垃圾收集发生时,应用程序会暂停。堆大小越大,垃圾收集越频繁,这会增加暂停时间。

局部变量存储在堆栈中。

垃圾收集通过标记和清除工作。它使用标记和扫描算法来释放内存空间。

您可以使用 MAT Analyzer 来查找内存泄漏的原因。

检查下面的链接谈话是关于内存管理的

http://www.youtube.com/watch?v=_CruQY55HOk

编辑:

关于算法如何工作的更多信息

http://www.brpreiss.com/books/opus5/html/page424.html

Android垃圾收集器的技术细节

于 2013-04-19T11:53:52.833 回答
0

heap在 Java 中)存储动态分配的variables,例如objects当堆内存不足时,JVM将运行垃圾收集。

Garbage collection使用处理周期,这会减慢您的手机速度。

如果您想知道,内存中存储东西的另一个地方称为堆栈,它存储参数和参数。

欲了解更多信息,请访问此 SO 答案

于 2013-04-19T11:51:04.990 回答