Neglecting To Release Resource

  • 리소스 해제하지 않는 경우 메모리 누수, 과도한 리소스 낭비, 성능 이슈가 발생할 수 있다.
  • 리소스 미사용 시 해제하지 않는 경우 발생한다.

원인

  1. 이해 부족
  2. 긴밀한 결합
    • 리소스 획득, 릴리즈 로직 간 긴밀한 결합이 이뤄진다 이러면 모든 경로에서 리소스가 릴리즈되도록 보장하기가 어려워질 수 있다.
  3. 예외 처리
  4. 복잡한 코드
    • 너무 복잡하면 리소스가 제대로 릴리즈 됐는지 확인하기 어려울 수 있다.

영향

  1. 메모리 누수
  2. 리소스 고갈
  3. 성능 저하
  4. 보안 취약점

해결

  1. try-with-resource 사용
  2. 리소스 획득, 릴리즈 로직을 분리
  3. 리소스 사용량 모니터링
  4. finally 등을 사용해서 닫거나 권장하는 사용법을 지키기 ( 명시적으로 리소스 해제 등 )
  5. finalizer를 사용해서 닫기 -> GC에서 처리될 때 호출할 수 있지만 언제 호출될지는 모른다. 추가적으로 finalizer 자체가 객체 재생성 공격 등에 취약하다.