繁体   English   中英

Java映像占用过多内存

[英]Java Images take up too much memory

我有一个使用很多图像的程序。 它从文件中加载了大量图像,并存储它们,因此它们仅加载一次。 它还创建了多个BufferedImages,大约为400x400,其中不超过10个。

来自文件的图像总计约6MB。 每个BufferedImage大约应为400x400x4 = 640KB。

但是,内存使用量为500MB!

其中一些将用于该程序的其余部分,但是我很确定图像占据了大部分空间。

有谁知道该怎么办? 还是使用更少内存的BufferedImage的替代方案?

在我看来,您的应用程序(而不是库)存在内存泄漏。 在第一种情况下,您应该尝试使用标准Java内存分析器识别泄漏。

编辑

现在,您已经确定有很多BufferedImages徘徊,接下来需要做的是弄清楚为什么仍然可以访问它们。 进行堆转储,查看一些实例,看看它们如何连接到堆根。 参见http://download.oracle.com/javase/6/docs/technotes/guides/visualvm/heapdump.html

在进行此类操作时,使用您喜欢的Java IDE查看Java源代码的相关部分很有用。

您的程序是Web应用程序吗? 或者您正在开发类似JRE的应用程序? 您如何加载图像?

在基于Web的应用程序中,我将使用CSS-Sprite图像来解决我的问题,因为它切断了多个HTTP请求,并改善了带宽使用率和负载时的内存使用率。

在JRE应用程序中,应该有一种以相同方式使用图像精灵的方法,即加载图像精灵的400x400偏移量以减少BufferedImage对象的使用并提高性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM