[JAVA] 객체 사용 후 null 할당

하동구·2021년 4월 27일
0

JAVA

목록 보기
1/10
  • JVM GC 에 대해 알고 계시다면 본론으로 바로 가시면 됩니다.

서론

  • 프로그래머가 메모리를 직접 해야하는 C++과 다르게 JAVA에서는 JVM이라는 가상 머신을 이용하여 GC 과정을 통해 사용하지 않는 객체의 메모리를 수거합니다.
  • JAVA에서 Data type은 크게 Primitive type과 Reference type로 구분합니다.
  • Primitive type은 Stack영역에 할당되고 Reference type은 Heap영역에 할당되고 그 주소(별칭)를 가지고 있습니다.
  • Reference type의 할당 시 Heap 메모리에 용량이 부족하다면 GC과정을 실행합니다.
  • 메모리 풀을 순환하며 더이상 참조하지 않는 객체의 메모리를 수거(해제)합니다.
    참조하고 있는 객체들을 마크하고 순환후 마킹이되지 않는 객체들을 소멸시킵니다
  • 비교적 최근 생성된 객체들은 1세대 영역에 존재하며 GC실행 후 살아남은 객체들은 2세대 영역에 등록이 됩니다.
  • GC 과정 후에도 1세대의 메모리 공간이 부족하다면 2세대 영역에도 실행하게되며 이를 N세대까지 반복하게 실행됩니다.

메모리적 관점을 봤을때 객체의 사용이 끝난 후 null 할당을 하면 GC과정에서 빠르게 제거될수 있게 됩니다.

  • null 할당을 안 했을 경우
    GC 실행 시 확인 과정을 거치기 때문에 메모리 관점에서 쾌적하지 못 할 수 있습니다.
  • null 할당을 했을 경우
    GC 실행 시 메모리 회수

몇가지 상황에서 더 좋은 대안이 있다고 하여 작성하게 되었습니다.

본론

다음과 같은 경우를 위해 만들어진 클래스가 있습니다.

  1. GC 실행 후 메모리가 충분하다면 계속 참조를 하고싶다.
  2. GC 실행 전까지만 계속 참조하고싶다.
  3. finalize 이후에 추가 처리 하고싶다.
구분
  1. SoftReference
  2. WeakReference
  3. PhantomReference
profile
한 줄 소개

1개의 댓글

comment-user-thumbnail
2021년 4월 27일

똥싸다 만듯한 글인데 추후에 다시 정리하도록 하겠스빈다.

답글 달기