有时我的应用程序在模拟器中崩溃,说堆内存太低。这堆意味着什么? 我的应用程序使用本地数据库和ksoap服务。堆问题不是每次都发生。它背后的原因是什么?
答案 0 :(得分:5)
堆是应用程序在RAM中用于存储数据的Dalvik虚拟机中分配的空间量。
当你尝试加载超出给你的堆空间的东西时会出现异常。
您只需加载所需内容,并在加载图像时缩小图像尺寸即可绕过它,这样就不会加载比显示所需尺寸更大的尺寸。
答案 1 :(得分:4)
堆是内存管理器用来跟踪内存的。它由一个或多个未使用的内存区域和所有已用内存块组成。
当堆变得太低时,意味着没有足够的可用内存,因为应用程序试图使用比可用内存更多的内存。可能有几个具体原因,例如:
您的应用程序使用了太多内存。
其他应用程序使用的内存很多,为您的应用程序留下的更少。
您的应用程序正在分配大块内存,但可用内存被分段为较小的块,因此无法使用。
尝试减少内存使用量,并确保正确释放内存,而不再使用内存。
答案 2 :(得分:2)
在编程中,为运行时创建的数据保留的内存区域 - 即程序实际执行时。相反,堆栈是用于数据的存储器区域,其大小可以在编译程序时确定。
答案 3 :(得分:1)
所有对象的静态变量都存储在堆上。 dalvik虚拟机将为每个应用程序分配一定量的堆空间。当堆大小增加并且您的应用程序需要内存垃圾收集器开始释放内存时。当垃圾收集发生时,应用程序暂停。堆大小越大,垃圾收集越频繁,这会增加暂停时间。
局部变量存储在堆栈中。
垃圾收集通过标记和扫描进行。它使用标记和扫描算法来释放内存空间。'
您可以使用MAT分析器查找内存泄漏的原因。
检查下面的链接是关于内存管理的
http://www.youtube.com/watch?v=_CruQY55HOk
编辑:
关于算法如何工作的更多信息
答案 4 :(得分:0)
heap
(在Java中)存储动态分配的variables
,例如objects
。当堆内存不足时,JVM
将运行垃圾收集。
Garbage collection
使用处理周期,这会降低手机速度。
如果您想知道,存储内容的内存中的另一个位置称为堆栈,它存储参数和参数。
更多信息请访问this SO answer。