'메모리 누수'에 해당되는 글 1건

  1. 2008/11/20 JDBC 자원들을 종료할 때, 발생할 수 있는 메모리 누수 문제. (1)
public int dao () throws Exception {
  try {
    .........
  } catch (Exception e) {
    throw new Exception(e);
  } finally {
     if (rs != null) { 
          rs.close();   // ! 이 부분에서 에러가 발생되면, 아래의 구문들은 실행되지 않는다.
     }
     if (pstmt != null) {
          pstmt.close();
     } 
     if (conn != null) {
          conn.close();
     }
  }
}

...
보통 JDBC 코딩을 하면서, 이런류의 코드를 많이 보아왔다.
하지만, 이 코드에는 중대한 결함이 있다.

예를 들어, rs.close(); 를 하는 도중에, 예외가 발생하면, 코드의 진행 절차가 상위 메소드로 넘어가 버린다.
그렇게 되면, 아래의  pstmt 와 conn 은 close() 되지 않고 그대로 남아 메모리 누수가 발생하게 되는 것이다.

이를 예방하는 올바른 방법의 코드를 보자.

  } finally {
     if (rs != null) {
        try { rs.close(); } catch (SQLException e) {}
     }
     if (pstmt != null) {
        try { pstmt.close(); } catch (SQLException e) {}
     } 
     if (conn != null) {
        try { conn.close(); } catch (SQLException e) {}
     }
  }

위와 같이 종료가 되는 각 부분을 try ~ catch 구문으로 감싸줘야, 위에서 실패하더라도 나머지 부분들이 종료가
안전하게 진행될 수 있다.

단순하지만.. 그 때문에 놓치기 쉬운 부분에 간단한 수정을 함으로써 메모리 누수를 막을 수 있게 되었다.

Posted by utsman 트랙백 0 : 댓글 1