Java Virtual Machine-Java의 메모리 누수
이 장에서는 Java의 메모리 누수 개념에 대해 논의 할 것입니다.
다음 코드는 Java에서 메모리 누수를 생성합니다.
void queryDB() {
try{
Connection conn = ConnectionFactory.getConnection();
PreparedStatement ps = conn.preparedStatement("query"); // executes a
SQL
ResultSet rs = ps.executeQuery();
while(rs.hasNext()) {
//process the record
}
} catch(SQLException sqlEx) {
//print stack trace
}
}
위 코드에서 메서드가 종료 될 때 연결 개체를 닫지 않았습니다. 따라서 물리적 연결은 GC가 트리거되기 전에 열린 상태로 유지되고 연결 개체에 연결할 수없는 것으로 간주됩니다. 이제 연결 개체에 대해 final 메서드를 호출하지만 구현되지 않을 수 있습니다. 따라서 개체는이주기에서 가비지 수집되지 않습니다.
원격 서버가 연결이 오랫동안 열려 있음을 확인하고 강제로 종료 할 때까지 동일한 일이 다음에 발생합니다. 따라서 참조가없는 객체는 오랫동안 메모리에 남아 누수가 발생합니다.