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