# Mark And Compact

## 들어가며

최근에 F-Lab 멘토링 시간에 GC 에 대한 질문에 대한 대답을 하면서 마크앤 스윕을 말씀드렸는데, 멘토님께서 너무 옛날(?) 알고리즘이라고 피드백을 주셨다. 그래서 다시 스터디를 해보았는데 정말 그러하였다.

찾아보다 알게된 Mark And Compact 알고리즘을 정리한다.

## Mark And Compact 는 무엇일까

[마크앤컴팩트](https://en.wikipedia.org/wiki/Mark%E2%80%93compact_algorithm)는 가비지 컬렉션이 사용하는 알고리즘 중 하나이다.(무엇이든 간단하게 한 문장 정의를 통해서 숲을 정확하게 인식한다. 분류의 의미이다.)

### Mark 는 무엇일까

가비지 컬렉터가 "활성" 객체(참조되고 있는 객체)를 추적하기 위해서 마크 하는 것이다.

### Compact 는 무엇일까

일단 Java GC 내에는 Eden 영역에 Survivor 가 둘 존재한다(S0, S1). 처음에 한 쪽을 일괄적으로 채우면서 사용하다가 한 쪽이 꽉 차게 되면 Minor GC 가 동작하는데 이 때 다른 Survivor 로 이동하면서 파편화 된 메모리 공간을 연속적인 공간에 할당해준다. 이 과정을 컴팩트 라고 칭하는 것이다.

메모리 블록을 연속적으로 형성함으로써 메모리 공간 활용도를 높힌다.
