簡體   English   中英

BufferedImage對象占用大量內存

[英]High memory consumption with BufferedImage object

不幸的是,我們在應用程序中一直使用BufferedImage對象來渲染PNG圖像,不幸的是,在執行了某些操作(如旋轉和調整圖像大小)之后(這些操作又創建並返回了具有更新的長度和寬度的新BufferedImage對象),Java堆大小變大了和高電平會導致OutofMemory錯誤。

即使關閉了當前的面板GC,也沒有收回這些BufferedImage對象消耗的內存,但我讀了很多線程,提到JDK本身的早期版本(1.5之前的版本)在BufferedImage中存在內存泄漏,但是沒有找到任何工作解決或解決此問題。 即使在移動中的JDK更高版本中,例如,我們也使用jdk1.6.0_26,並且仍然能夠看到此問題。

如果有人可以建議一些技巧來阻止BufferedImage對象或該對象的任何其他替代實現的內存泄漏,那就太好了嗎?

您應該嘗試僅將AffineTransformGraphics2D方法drawImage一起使用 (或使用AffineTransform對象的任何其他方法)。

這些AffineTransform對象是變換矩陣,它們可以將所有圖像操作保持在一個矩陣中,然后以1個變換的代價將該變換矩陣應用於圖像。

您可以使用轉換矩陣執行以下四項操作中的任何一項:

  • 翻譯
  • 回轉
  • 規模
  • 剪力

同樣,通過這種方式,您不必每次應用轉換都構造一個新的BufferedImage。

我們在這里遇到同樣的麻煩。 我們正在使用許多JChart實例,並且內存很容易泄漏。

所有泄漏都發生在java.awt.image.BufferedImage

我們找到的解決方案是:

  • 在您的情況下,刪除對象引用BufferedImage object.remove()object = null
  • 調用垃圾收集器System.gc() 那將釋放您的記憶。

但是GC的使用有點昂貴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM