2009-10-20 2 views

답변

4

사용중인 프레임 워크와 같은 세부 정보를 제공해야합니다.

어쨌든 JDBC를 사용하고 있습니까? 그렇다면 각각의 close() 메서드를 사용하여 Statement, ResultSet 및 Connection을 사용하여 다음 개체를 닫아야합니다.

6

항상 모든 연결, 문 및 결과 집합을 닫아야합니다.

그렇지 않은 경우 메모리 누수보다 풀에서 새 연결을 확보 할 가능성이 더 높습니다.

1

소스가 없지만 JDBC 드라이버 구현에 따라 달라 지므로 당연한 것으로 생각합니다. 연결을 닫고 모든 JDBC 드라이버가 사용자를 대신 해줄 수는 없으므로 스스로 해결해야합니다 (일부는 가능할 지 모르지만).

이것은 내가 따르기를 좋아하는 규칙으로 돌아갑니다. - 뭔가를 만들거나 열면, 나는 그것을 삭제하거나 닫을 책임이 있습니다.

3

JDBC를 사용한다고 가정하면 대답은 '예'입니다. 연결을 닫지 않으면 JDBC 드라이버가 finallizer에서 닫으려고 시도 할 수 있지만 매우 오랜 시간 동안 연결을 열어 리소스 문제를 일으킬 수 있습니다 (하나의 연결에서 데이터베이스 연결이 허용됨) 시간은 유한하다). 일반적으로 JDBC 프로그래밍은 데이터베이스 풀을 사용하여 수행되며 연결을 닫지 않으면 풀에서 사용 가능한 연결이 매우 빨리 소모됩니다.

일부 응용 프로그램 서버 (예 : JBoss)는 연결이 닫히지 않았을 때이를 감지하고 트랜잭션을 관리하는 경우이를 닫습니다. 그러나 이에 의존해서는 안됩니다.

물론 일부 JDBC 드라이버는 순수한 자바 드라이버가 아니며, 그 시점에서 메모리 누출이 매우 실제적인 가능성이 있습니다.

관련 문제