在使用ImageIO.read 進行圖片處理的時候, 感覺記憶體一直在漲,始終無法釋放
@RequestMapping(value = "/test")
@ResponseBody
public Result<Object> faceAdd() {
try {
File f = new File("C:\\Users\\Administrator\\Desktop\\1.png");
try{
ImageInfo imageInfo = ImageUtil.getRGBData(f);
logger.info("識別:"+f.getName());
}catch (Exception e){
logger.error("識別:"+f.getName()+"失敗");
}
return Results.newSuccessResult("");
} catch (Exception e) {
logger.error("", e);
}finally {
}
return Results.newFailedResult(ErrorCodeEnum.UNKNOWN);
}
public static ImageInfo getRGBData(File file) {
if (file == null)
return null;
ImageInfo imageInfo;
try {
//將圖片檔案加載到記憶體緩沖區
BufferedImage image = ImageIO.read(file);
image.flush();
} catch (IOException e) {
e.printStackTrace();
return null;
}
return null;
}一個純凈的spring boot 工程 剛剛啟動大概占用內從200 M ,回圈1000次這個方法后, 就上G了,然后一直漲
希望大佬幫幫我
uj5u.com熱心網友回復:
頂貼
uj5u.com熱心網友回復:
.dispose()uj5u.com熱心網友回復:
試了, 沒用。uj5u.com熱心網友回復:
首先你回傳了什么看不出來,ImageInfo這個物體類,到底有沒有包含整張圖片的byte[]資料,還是只包含一些長寬啊,File路徑啊之類的資訊。如果包含了整張圖片,那么檢查這個方法外層,呼叫者有沒有把回傳的物件給存進什么串列里。如果沒有包含,那么你改為:
FileInputStream fis=null;
try {
fis = new FileInputStream(f);
ImageIO.read(fis);
} catch (Exception e) {
throw e;
} finally {
CloseUtil.close(fis);
}
其中 CloseUtil.close(fis)方法:
public class CloseUtil {
public static void close(Closeable... closeables) {
if (closeables == null) {
return;
}
for (Closeable closeable : closeables) {
if (closeable != null) {
try {
closeable.close();
} catch (IOException e) {
}
}
}
}
}
把流關干凈,釋放檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/141033.html
標籤:Java相關
上一篇:我想問一下大佬 spring boot thyemalaf 為什么點擊事件傳不了引數啊。是我取引數方法錯了嗎?
下一篇:java錯誤: 找不到符號
