[Effective Java]아이템 7 - 다 쓴 객체 참조를 해제하라

HyeBin, Park·2022년 5월 8일
0

Effective Java Study

목록 보기
5/20
post-thumbnail

아이템7 - 다 쓴 객체 참조를 해제하라

💧 메모리 누수 (memory leak)

컴퓨터 과학에서 메모리 누수(memory leak) 현상은 컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상 이다. 할당된 메모리를 사용한 다음 반환하지 않는 것이 누적되면 메모리가 낭비 된다. 즉, 더 이상 불필요한 메모리가 해제되지 않으면서 메모리 할당을 잘못 관리할 때 발생한다. 일부 서적에서 메모리 손실이라는 용어로 뜻을 옮기기도 하지만 leak라는 표현은 단순히 잃는 것 이상의 개념이므로 누수라는 표현이 더 정확하다. - 위키백과

  • c언어에서 malloc 이라는 함수를 사용하면 동적으로 크기를 할당 해줄 수 있는데, 이때 다 사용하고 나면 free를 통해서 메모리 해제를 해야함
  • 메모리를 해제 하지 않으면 memory leak
  • 자바는 이를 가비지 컬렉터가 처리해주는데 그럼에도 누수가 생길 수 있음

🏭 가비지 컬렉터

쓰레기 수집(garbage collection 가비지 컬렉션, GC)은 메모리 관리 기법 중의 하나로, 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능이다. 영어를 그대로 읽어 가비지 컬렉션이라 부르기도 한다. 1959년 무렵 리스프의 문제를 해결하기 위해 존 매카시가 개발하였다. - 위키백과

  • 객체 참조 하나를 살려두면 GC는 그 객체 뿐만 아니라 그 객체가 참조하는 모든 객체(연쇄적)를 회수해가지 못한다.
  • 자기 메모리를 직접 관리하는 클래스라면 프로그래머는 항시 메모리 누수에 주의해야 한다.
  • 캐시도 메모리 누수를 일으키는 주범 -> WeakHashMap 사용으로 해결

⛳ WeakHashMap

  • 기존의 해쉬맵과 같은 형태지만 키가 weak reference이다.
  • 키가 더 이상 존재할 필요가 없다고 jvm이 판단하면 GC에 넘겨버림
  • thread safe x
  • 주로 캐시를 만들 때 사용
  • String 리터럴 방식과 wrapper class 는 사용 불가 -> jvm에 이미 보관

weak reference ?

  • 효율적인 GC 처리를 위해 reference의 종류가 나누어져있음
  • Strong Reference, Soft Reference, Weak Reference, Phantom Reference
  • weak reference는 GC의 대상이 됨

0개의 댓글