fullGC가 지나치게 빈번한 원인과 해결 방안

1689 단어 jdk 기초
사례1 시스템의 절정기fullGC가 빈번하고 최적화된 후에 정상으로 회복된다.원인: 시스템에서 빈번한 인터페이스를 호출하면 다음과 같은 방법을 호출한다. 그 목적은 그림의 넓이와 높은 정보를 얻기 위해서이다. 그러나 Image라는 대상이 사용하면 자동으로 방출되지 않기 때문에flush() 방법을 수동으로 호출해야 한다.이전에 이 방법을 사용하지 않았기 때문에 요청이 있으면 큰 대상이old구역에 들어와 업무 러시아워에old구역이 잠깐이면 꽉 차서 fgc를 계속 진행했습니다.
public static Image getImage(String path) { 
    ImageIcon icon = new ImageIcon(path); 
    Image img = icon.getImage(); 
    return img; 
}

해결 방법: 사실 Image든 BufferedImage든 그림의 넓이를 읽으면 그림을 모두 메모리에 불러올 필요가 없다. 그림의 넓이와 높은 정보는 사실 파일 헤더에 저장된 것이다. 서로 다른 형식으로 파일의 헤더 정보를 읽으면 넓고 높은 정보를 얻을 수 있다. ImageReader 코드는 다음과 같다.
Iterator readers = ImageIO.getImageReadersByFormatName(StringUtil.getFileSuffix(filePath)); 
ImageReader reader = (ImageReader)readers.next(); 
iis = ImageIO.createImageInputStream(is); 
reader.setInput(iis, true); 
return Pair.of(reader.getWidth(0),reader.getHeight(0));

참고 자료:http://itindex.net/detail/53283-%E7%B3%BB%E7%BB%9F-full-gc

좋은 웹페이지 즐겨찾기