[java] 가비지 컬렉션 알고리즘 종류

가비지 컬렉션 알고리즘에는 여러 종류가 있으며, 주요 알고리즘에는 다음과 같은 것들이 있습니다.

  1. 참조 카운팅(Reference Counting): 이 알고리즘은 객체를 가리키는 참조의 수를 추적하여, 참조 수가 0이 되면 가비지로 간주하고 메모리를 해제합니다. 그러나 순환 참조(circular reference) 문제를 해결하지 못하는 등 일부 한계가 있습니다.

  2. 스택 구현(Stack-Based): 이 알고리즘은 JVM 스택에서만 살아 있는 객체만을 유효하다고 판단하여, 해당 객체를 유지하고 그 외의 객체를 가비지로 처리합니다.

  3. 표시하고 회수(Mark and Sweep): 이 알고리즘은 루트 객체부터 시작하여 도달 가능한(reachable) 모든 객체를 표시한 후, 표시되지 않은 객체들을 회수하여 메모리를 해제합니다.

  4. 세대별 가비지 컬렉션(Generational Garbage Collection): 이 알고리즘은 객체의 수명 주기에 따라 여러 세대(generation)로 나누어 가비지 컬렉션을 수행합니다. 새로 생성된 객체는 첫 번째 세대에, 일정 시간 이상 살아남은 객체는 두 번째나 세 번째 세대에 할당되며, 주기적으로 각 세대별로 가비지 컬렉션을 수행합니다.

가비지 컬렉션 알고리즘 선택은 개발자나 시스템 관리자가 JVM의 성능, 응답 시간, 메모리 사용 등을 고려하여 결정해야 합니다. Java에서는 여러 가비지 컬렉션 알고리즘을 조합하여 최적의 성능을 얻을 수 있도록 설정할 수 있습니다.

참고 문헌: