我有一个移动应用程序随着时间的推移速度变慢。我的直觉(部分由 this article 提供)是由于内存碎片导致应用程序变慢,但我不确定。这是应用内存使用随时间变化的漂亮图表:
fraggle rock http://kupio.com/image-dump/fragmented.png
图表上的 4 个峰值是应用程序上完全相同的任务的 4 次执行。我开始任务,它分配了一堆内存,它坐了一会儿(顶部的扁平线)然后我停止了任务。那时它调用 System.gc();并且内存被清理。
可以看出,完全相同的任务的 4 次运行中的每一次都需要更长的时间来执行。图中的低点都返回到同一水平,因此任务运行之间似乎没有任何内存泄漏。
我想知道的是,内存碎片是一个可行的解释,还是我应该先看看别处,记住我已经做了很多查找?图中的低点相对较低,所以我的假设是在这种状态下内存不会非常碎片化,因为不会有很多小的内存空洞导致问题。
虽然我不知道 j2me 内存分配器是如何工作的,所以我真的不知道。谁能建议?有没有其他人遇到过这个问题并认识到应用程序的内存配置文件?
最佳答案
如果您有一点时间,您可以通过使用内存池技术重新使用内存来测试您的理论:任务的每次运行都使用“相同”的内存块,方法是从池中获取它们并在发布时归还它们。
如果在进行此调查后您仍然看到性能下降,则不是内存碎片导致了问题。让我们都知道您的结果,我们可以帮助进一步解决问题。
关于java - 碎片化内存是什么样子的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1267031/