【发布时间】:2026-02-20 21:55:01
【问题描述】:
我有一个移动应用程序随着时间的推移速度变慢。我的预感,(部分由this article 提供)是这是由于内存碎片减慢了应用程序的速度,但我不确定。这是应用程序的内存使用随时间变化的漂亮图表:
fraggle rock http://kupio.com/image-dump/fragmented.png
图表上的 4 个峰值是应用程序上完全相同任务的 4 次执行。我开始任务,它分配了一堆内存,它坐了一会儿(顶部的平线),然后我停止了任务。此时它调用 System.gc();并且内存被清理了。
可以看出,完全相同的任务的 4 次运行中的每一次都需要更长的时间来执行。图中的低点都返回到相同的水平,因此任务运行之间似乎没有任何内存泄漏。
我想知道的是,内存碎片是一个可行的解释,还是我应该先看看其他地方,记住我已经做了很多寻找?图上的低点相对较低,所以我的假设是在这种状态下内存不会很碎片化,因为不会有很多小的内存漏洞会导致问题。
我不知道 j2me 内存分配器是如何工作的,所以我真的不知道。任何人都可以建议吗?有没有其他人遇到过这个问题并识别出应用程序的内存配置文件?
【问题讨论】:
-
普通 Java VM 压缩其堆作为其垃圾收集职责的一部分(删除任何碎片) - 虽然不确定 J2ME...
标签: java memory memory-management java-me memory-fragmentation