Когда я использую приведенный ниже код, я испытываю утечку памяти. Каждый раз, когда я запускаю код, потребление памяти приложения увеличивается. Кто-нибудь знает, что я делаю с этим кодом, который заставляет его продолжать увеличивать потребление памяти при вызове метода контроллера?Ошибка утечки памяти.
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? –
Просто используя диспетчер задач из окон и контролируйте процесс Java. Он перескакивает 300 МБ или около того в первый раз, а затем 100 МБ при каждом последующем запуске, вызывающем метод с теми же данными. Каждый раз, когда я вызываю свой метод контроллера, этот фрагмент кода вызывается примерно 200 раз. – flips