我正在使用 LWUIT 编写一个 MIDlet,而图像似乎消耗了大量的内存。我使用的所有图像都是 PNG,并被打包在 JAR 文件中。我使用标准的 Image.createImage(URL) 方法加载它们。该应用程序有许多表单,每个表单都有几个标签和按钮,但是我相当确定只有活动表单保存在内存中(我知道它不是很值得信赖,但 Runtime.freeMemory() 似乎可以确认这个)。
该应用程序在 240x320 分辨率下运行良好,但将其移动到 480x640 并为 UI 使用适当更大的图像开始导致出现内存不足错误。除其他外,该应用程序的作用是下载远程图像。该应用程序似乎可以正常工作,直到达到这一点。下载几个PNG并返回主菜单后,遇到内存不足错误。当然,我查看了主菜单使用的内存量,这非常令人震惊。它只是两个带有图像的标签和四个按钮。每个按钮都有用于 style.setIcon、setPressedIcon 和 setRolloverIcon 的三个图像。图像大小从 15 到 25KB 不等,但删除了每个按钮使用的三个图像中的两个(总共 8 个图像),Runtime.freeMemory() 显示内存使用量惊人地减少了 1MB。
在我看来,我要么有很多内存泄漏(我认为我没有,但内存泄漏并不完全知道很容易追踪),我在图像处理或真的没有问题,我只需要按比例缩小。
如果有人有任何见解可以提供,我将不胜感激。