首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用BufferedImage对象的高内存消耗

使用BufferedImage对象的高内存消耗
EN

Stack Overflow用户
提问于 2012-02-28 15:28:48
回答 2查看 4.3K关注 0票数 4

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

即使在关闭当前面板GC没有回收这些BufferedImage对象所消耗的内存之后,我也读过很多线程,提到JDK本身(1.5之前)的旧版本在BufferedImage中出现内存泄漏,但没有找到任何工作或修复。例如,即使在JDK的后期版本中,我们也在使用jdk1.6.0_26,并且仍然能够看到这个问题。

如果有人能建议一些技巧来阻止BufferedImage对象或该对象的任何其他替代实现的内存泄漏,那就太好了。

EN

回答 2

Stack Overflow用户

发布于 2012-05-04 07:18:58

您应该尝试将AffineTransformGraphics2D方法drawImage (或任何其他接受AffineTransform对象的方法)一起使用。

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

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

  • 翻译
  • 旋转
  • 规模
  • 切变

同样,在每次应用转换时,您都不必构建一个新的BufferedImage。

票数 2
EN

Stack Overflow用户

发布于 2013-04-12 13:53:27

我们在这里也遇到了同样的麻烦。我们使用了大量的JChart实例,内存很容易泄漏。

所有泄漏都发生在java.awt.image.BufferedImage中。

我们找到的解决办法是:

  • 在您的情况下删除对象引用BufferedImageobject.remove()object = null
  • 调用垃圾收集器System.gc()。这将真正释放你的记忆。

但是GC的使用有点贵。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9484749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档