gpt4 book ai didi

java - BufferedImage 对象的高内存消耗

转载 作者:搜寻专家 更新时间:2023-11-01 03:57:08 24 4
gpt4 key购买 nike

我们一直在我们的应用程序中使用 BufferedImage 对象来呈现 PNG 图像,不幸的是,在执行某些操作(例如旋转和调整图像大小)之后(这些操作反过来创建并返回具有更新的长度和宽度的新 BufferedImage 对象)java 堆大小越来越高导致 OutofMemory 错误。

即使在关闭当前面板后 GC 也没有回收这些 BufferedImage 对象消耗的内存,我读过很多线程提到旧版本的 JDK 本身(1.5 之前)在 BufferedImage 中有内存泄漏,但没有找到任何解决方法或解决此问题。即使在 JDK 的更高版本中,例如在我们使用 jdk1.6.0_26 的 movement 中,仍然能够看到这个问题。

如果有人可以提出一些技巧来阻止 BufferedImage 对象或该对象的任何其他替代实现的内存泄漏,那将会很棒吗?

最佳答案

你应该尝试只使用 AffineTransformGraphics2D方法 drawImage (或任何其他采用 AffineTransform 对象的对象)。

这些 AffineTransform 对象是变换矩阵,它们可以将所有图像操作保存在一个矩阵中,然后以 1 次变换为代价将该变换矩阵应用于图像。

你可以用转换矩阵做四件事中的任何一件:

  • 翻译
  • 轮换
  • 规模
  • 剪切

同样,通过这种方式,您不必在每次应用转换时都构造一个新的 BufferedImage。

关于java - BufferedImage 对象的高内存消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9484749/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com