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