我有一个移动应用程序,随着时间的推移正在减速。我的预感(部分由this article提供)是因为内存碎片导致应用程序放慢,但我不确定。这里的应用程序的内存使用的漂亮曲线随着时间的推移:碎片内存是什么样的?
fraggle rock http://kupio.com/image-dump/fragmented.png
图上的4个峰上的应用程序完全相同的任务的4个处决。我开始了任务,它分配了一堆内存,它坐了一下(顶部的扁平线),然后我停止了任务。此时它调用System.gc();内存得到清理。
可以看出,完全相同任务的4次运行中的每一次都需要较长时间才能执行。图中的低点都返回到同一级别,所以在任务运行之间似乎没有任何内存泄漏。
我想知道的是,内存碎片是一种可行的解释,还是应该先查看别处,记住我已经做了很多工作?图上的低点相对较低,所以我的假设是,在这种状态下,内存不会很分散,因为不会有很多小内存孔导致问题。
我不知道j2me内存分配器是如何工作的,所以我真的不知道。任何人都可以建议吗?有没有其他人有这个问题,并认识到应用程序的内存配置文件?
正常的Java虚拟机压缩其堆作为其垃圾收集职责的一部分(消除任何碎片) - 虽然不确定J2ME ...... – bdonlan 2009-08-12 15:56:29