JAVA

가비지 컬렉션(Garbage Collection) 동작원리

diligentdev 2024. 2. 1. 20:34
728x90

가비지 컬렉터가 가비지 컬렉션을 수행

가비지 컬렉션

  • 메모리 관리기법
  • 힙내에 동적으로 할당했던 메모리 영역 중 필요 없게 된 영역을 해제하는 기능

가비지 컬렉터 동작원리

  • 포인터 추적 방식
    • 1개 이상의 variable가 가리키는 직/간접적인 메모리는 사용하고 있는 메모리로 간주
    • 그밖에 메모리는 해제
  • Mark and Sweep
    • 메모리 중 1비트를 남겨 메모리 사용 여부를 표시
    • 모든 변수가 가리키는 메모리를 사용중이라 표시
    • 재귀적으로 따라가며 모두 표시
    • 마킹이 안된 영역은 메모리 해제
    • 표시중 내용이 변경될 수 있다는 단점
  • 삼색 표시 기법
    • mark and sweep의 단점 보안
    • 3가지 정보로 나눠서 표시
      • 흰색, 회색, 검은색
      • 흰색
        • 더이상 접근 불가능 객체
      • 회색
        • 접근 가능한 객체
        • 가리키는 객체들은 아직 검사되지 않음
      • 검은색
        • 가리키는 객체들이 흰색 객체를 가리키지 않았음
    • 알고리즘 작동 방식
      • 알고리즘 시작시, 변수가 가리키는 객체들이 회색, 그외에는 흰색
      • 회색 중 하나를 선택해 검은색으로 표시, 이 객체가 가리키는 객체를 모두 회색으로 표시
      • 회색객체가 하나도 남지 않을 때가지 수행
      • 흰색 객체만 삭제
728x90