【发布时间】:2013-12-03 22:08:05
【问题描述】:
当我使用下面的代码时,我遇到了内存泄漏。每次我运行代码时,应用程序的内存消耗都会增加。有谁知道我在用这段代码做什么,导致它在调用该控制器方法时不断增加内存消耗?
BufferedImage originalImage = ImageIO.read(new File(pageService.getBaseLocation() + File.separator + page.getSha1()));
if(originalImage != null){
int type = originalImage.getType() == 0? BufferedImage.TYPE_INT_ARGB : originalImage.getType();
int width = new Double(originalImage.getWidth() * (300.0/originalImage.getHeight())).intValue();
BufferedImage resizedImage = new BufferedImage(width,300, type);
Graphics2D g = resizedImage.createGraphics();
g.setComposite(AlphaComposite.Src);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g.drawImage(originalImage, 0, 0, width, 300, null);
g.dispose();
ImageIO.write(resizedImage,"png",response.getOutputStream());
response.flushBuffer();
response.getOutputStream().close();
}
【问题讨论】:
-
您如何测量应用程序中使用的内存?它还会耗尽内存吗?
-
怎么知道GC循环后内存没有释放?
-
只使用windows的任务管理器并监控java进程。它第一次跳转 300MB 左右,然后每次后续运行使用相同数据调用该方法时跳转 100MB。每次我调用我的控制器方法时,这段代码 sn-p 都会被调用大约 200 次。
-
michal rybak 我如何检查?
-
你可以使用jvisualvm之类的工具,它是免费的jdk自带的。我会一直调用控制器逻辑来查看程序是否内存不足。
标签: java spring spring-mvc memory-leaks