java - 释放 BufferedImage 内存的最快方法

标签 java memory bufferedimage

将 BufferedImage 保存到磁盘(以释放内存)的最快方法是什么?

我的 Java 应用程序处理大量图像(每约 300 毫秒将图像加载到内存中)。大多数这些图像都会立即被丢弃 (gc),但每隔一段时间我就需要保存一张图像。

当然,将它们保存在 RAM 中并不是一个好主意,因为它会在几分钟内吃掉平均 2GB 的 JVM,并破坏应用程序,因此我尝试将其保存到磁盘。问题是,用 ImageIO.write(img, "PNG", file) 保存它是不够的,因为它有时需要(在我的 i7 机器上)每 12MB 图像处理 5-10 秒并保存,但仍然不能足够快地释放内存。

是否有其他格式可能执行得更快?

编辑:

我不关心在合理的水平上降低分辨率或丢失图像数据。

最佳答案

PNG 在 ImageIO 中是出了名的慢。您可以尝试获取底层读者和作者。 也许写一个高质量的 JPEG。 Alternatives .

难道你不能先把输入的文件存储为 File,这样就不需要用 ImageIO 写了。

为了完整起见:如果您使用 BufferedImage.getGraphics(),请不要忘记 dispose()

关于java - 释放 BufferedImage 内存的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17989942/

相关文章:

java - 如何在 fragment 之间导航?

java - Android 的 Google 安全浏览的简单检查 URL?

java - JMeter:64 位 Windows 操作系统可以增加多少 Java 堆大小

java - 使用 java.awt.image.BufferedImage 创建 BIFF8 BITMAP 记录需要很多时间 - 有没有更好的方法?

java - 从 File 更改为 BufferedImage 时出现 IOException

java - 如何阻止 java 将 BufferedImage 设置为完全透明?

java - JPype - 导入和调用方法的问题!

java - 如何提高我的应用程序的速度?

c++ - 链接器用内存地址替换符号引用?

c - 为什么 memmove 前几个字节会乱码