serial gc는 단일 스레드로 동작하는 gc 알고리즘이다. 단일 스레드로 동작하므로 구현하기 가장 쉬운 기초적인 알고리즘이며 앞으로 공부할 parallel gc, g1gc, cms gc와 같은 알고리즘을 왜 공부하고 사용해야하는지를 이해하기에 필수 불가결한 알고리즘이다.
CPU 코어가 1개인 컴퓨터에서 주로 사용하며 실무에서 사용하는 경우는 없다.
동작 과정. Mark & Sweep & Compact
0. mark 과정
객체에 도달이 가능하지, 불가능한지 판별하는 작업이다. mark bit를 활용하여 마킹하며 serial gc의 과정은 STW 작업이기 때문에 애플리케이션이 중지된다.
1. young gc
첫번째 eden 영역에서 참조하지 않는 객체들을 지우고 survivor 영역으로 넘긴다.
survivor 영역에서 일정 기준 이상 살아남은 객체들은 old 영역으로 이동한다.
2. old gc
old 영역은 Tenured 영역이라고도 불리며 영역이 가득 찼을 경우에만 gc가 발생한다.
3. Compaction
old 영역은 객체의 삭제, 생성이 빈번하게 일어나지 않으므로 객체가 계속해서 커질 수 있다. 그래서 메모리 단편화 현상( Fragmentation )이 발생할 수 있기 때문에 gc가 일어났을 경우 Compaction을 통하여 메모리 단편화 현상을 방지한다.
모든 gc가 serial gc를 base로 깔고 들어감.
https://whiteman97.tistory.com/251 참고
다음은 parallel gc로 이어간다.
'프로그래밍언어' 카테고리의 다른 글
parallel garbage collection (0) | 2023.04.13 |
---|---|
Red-Black tree ( 레드-블랙 트리 ) (0) | 2023.04.12 |
JAVA 참조 유형과 관련된 자료구조 (0) | 2023.04.05 |
java8이전과 이후의 garbage collector의 동작과 종류 (0) | 2023.03.26 |
싱글톤과 플라이웨이트 패턴 (1) | 2023.03.13 |