[英]High memory consumption with BufferedImage object
不幸的是,我們在應用程序中一直使用BufferedImage對象來渲染PNG圖像,不幸的是,在執行了某些操作(如旋轉和調整圖像大小)之后(這些操作又創建並返回了具有更新的長度和寬度的新BufferedImage對象),Java堆大小變大了和高電平會導致OutofMemory錯誤。
即使關閉了當前的面板GC,也沒有收回這些BufferedImage對象消耗的內存,但我讀了很多線程,提到JDK本身的早期版本(1.5之前的版本)在BufferedImage中存在內存泄漏,但是沒有找到任何工作解決或解決此問題。 即使在移動中的JDK更高版本中,例如,我們也使用jdk1.6.0_26,並且仍然能夠看到此問題。
如果有人可以建議一些技巧來阻止BufferedImage對象或該對象的任何其他替代實現的內存泄漏,那就太好了嗎?
您應該嘗試僅將AffineTransform與Graphics2D方法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.