相关文章推荐
重情义的甘蔗  ·  【沒錢買ps,PyQt自己寫】Day 13 ...·  1 年前    · 
飘逸的感冒药  ·  北京大学邓明华教授学术报告通知-西安交通大学 ...·  1 年前    · 
光明磊落的路灯  ·  21套云原生实战训练营K8s+Docker+ ...·  2 年前    · 
绅士的酱牛肉  ·  Docker ...·  2 年前    · 
Code  ›  使用BufferedImage对象的高内存消耗开发者社区
overflow
https://cloud.tencent.com/developer/ask/sof/109360852
骑白马的毛巾
1 年前
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
提问

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

Stack Overflow用户
提问于 2012-02-28 15:28:48
EN

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

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

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

2 4.3K 0 票数 4
EN
java
out-of-memory

回答 2

Stack Overflow用户

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

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

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

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

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

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

票数 2
EN

Stack Overflow用户

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

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

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

我们找到的解决办法是:

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

但是GC的使用有点贵。

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

https://stackoverflow.com/questions/9484749

复制

Copyright © 2013 - 2024 Tencent Cloud.

All Rights Reserved. 腾讯云 版权所有

 
推荐文章
重情义的甘蔗  ·  【沒錢買ps,PyQt自己寫】Day 13 - 使用 QVBoxLayout, QscrollArea 製作出捲軸,以高解析度檢視圖片 (基於 QImage 使用 OpenCV) - iT 邦幫忙:
1 年前
飘逸的感冒药  ·  北京大学邓明华教授学术报告通知-西安交通大学数学与统计学院
1 年前
光明磊落的路灯  ·  21套云原生实战训练营K8s+Docker+DevOps+Jenkins - 掘金
2 年前
绅士的酱牛肉  ·  Docker 技术系列之安装Redis单机版和集群版 - souvc - 博客园
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号