[英]BufferedImage leaks - are there any alternatives?
我在BufferedImage上遇到了奇怪的問題,在某些情況下,它占用了所有可用的系統內存(3 GB,1.5 GB可用空間)。
我創建了一個簡單的包裝器,並按如下方式使用它:
public ImageWrapper(final byte[] bytes) throws ImageWrapperException {
this(new ByteArrayInputStream(bytes));
}
public ImageWrapper(final ByteArrayInputStream bis) throws ImageWrapperException {
try {
image = ImageIO.read(bis);
bis.close();
} catch (IOException e) {
throw new ImageWrapperException(e);
}
}
(我已經讓jsut驗證了即使在image = ImageIO.read(file);
情況下也會發生)
在第一個“無法分配內存”之前,我沒有任何異常。
由於某種原因,當讀取特定類型的圖像時,圖像的讀取最終將消耗所有的系統內存。 我說的不是堆,而是系統內存。
它僅在某些環境中發生-它不會在OSX上發生,但是會在我的Debian服務器上發生。
謝謝
編輯:
image = ImageIO.read(file);
-我開始認為,它一定是Java之外的東西-一些原生的bug車... EDIT2:
所以問題出在文件系統上-我有一個7GB目錄,里面有成千上萬張圖像。 當我嘗試讀取文件時,它會消耗所有內存-我認為這是某種文件系統問題。
與ImageIO.read()和BufferedImage相關的一些已知錯誤
BufferedImage肯定存在問題-我已經在兩台服務器上對其進行了測試,並且泄漏的結果相同-系統內存已完全耗盡。
最后,我用PHP編寫了一個簡單的包裝程序,現在我使用GD進行圖像處理。 現在工作正常。 感謝所有的建議!
嘗試將代碼移至java.nio
並訪問memory mapped file
。 這些存儲在堆之外。
這樣的SO很有趣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.