항목 9. 좋은 일을 하기보다 자원을 시도하라

(왜)

  • 코드를 더 짧고 명확하게 만들 수 있기 때문에 -> 가독성 향상
  • 예외 정보를 추적하는 데 유용합니다.

(만약에)

  • 리소스 회수가 필요한 객체를 close() 메소드를 사용하여 삭제할 때

(어떻게)

try(BufferedReader br = new BufferedReader(new FileReader(path)){
    return br.readLine();
} catch(Exception e){
    e.printStackTrace();
} finally{
    br.close();
}

(GC가 있을 때 close()를 사용하는 이유)

Java의 메모리 관리는 가비지 컬렉터에서 자동으로 처리하므로 close()를 호출하여 리소스를 명시적으로 회수해야 하는 이유가 궁금했습니다.
가비지 컬렉터는 JVM이 관리하는 메모리 영역을 정리합니다. 그러나 가비지 수집기는 다음과 같이 JVM 단독으로 처리할 수 없는 다른 시스템의 도움이 필요한 항목을 정리할 수 없습니다. B. 파일 시스템의 기본 메서드, 파일 및 스레드. 이러한 리소스를 회수하기 위해 프로그래머는 close()를 사용하여 명시적으로 리소스를 회수합니다.

가비지 수집기가 이러한 리소스를 회수할 수 없는 이유는 높은 수준의 임의 리소스 처리가 설계 의도를 손상시키기 때문이 아닙니까?