GC(Garbage Collector) 알고리즘
GC 종류에 따라 다양한 알고리즘이 사용될 수 있습니다. GC 알고리즘은 Mark And Sweep, Mark And Sweep Compact, Mark Summary Compaction 등이 있습니다.
용어 정리
GC(Garbage Collector)
- 자바의 메모리 관리 방법 중 하나
- JVM에서 메모리를 관리해주는 모듈
- Heap 메모리를 재활용하기 위해서 더 이상 참조되지 않는 객체들을 메모리에서 제거하는 모듈
> GC의 종류
- Serial GC, Parallel GC, Parallel-Old GC, CMS GC, G1 GC
- 각각의 종류에 따라 다양한 알고리즘이 사용될 수 있음
JVM의 GC 참고하기
> GC 알고리즘
- GC를 구현하는데 사용될 수 있는 구체적인 GC 알고리즘들
- Mark And Sweep, Mark And Sweep Compact, Mark Summary Compaction 등이 있음
- 이러한 알고리즘들은 GC의 동작 방식과 특성을 결정, 각각의 GC 종류에 따라 사용되는 알고리즘이 달라질 수 있음
> Mark And Sweep
![](https://velog.velcdn.com/images/thsruddl77/post/579a8bc2-73a6-4bc9-981f-cf9920015d0a/image.gif)
- Mark : 가비지 컬렉션 대상이 아닌(Reachable) 객체를 표시
- Sweep : 표시되지 않은 객체(가비지)를 힙에서 제거하여 메모리 회수
> Mark And Sweep Compact
![](https://velog.velcdn.com/images/thsruddl77/post/d879b376-a5ef-4d24-b564-02a7efc20154/image.gif)
- Mark And Sweep 알고리즘과 비슷, 다른 점은 Sweep 후에 Compact 과정이 있음
- Mark : 가비지 컬렉션 대상이 아닌(Reachable) 객체를 표시
- Sweep : 표시되지 않은 객체(가비지)를 힙에서 제거하여 메모리 회수
- Compact : 가비지 수집 후에 남은 객체들을 메모리 한쪽으로 모으고, 빈 공간으로 한 곳으로 모아 연속된 블록을 만듦, 이는 Heap 내의 각 블록들을 더 효율적으로 관리할 수 있게 함
- 가비지 수집 : 프로그램 실행 중에 더 이상 필요하지 않은 메모리를 자동으로 식별하고 해제하는 프로세스
> Mark Summary Compaction
- Heap의 Old 영역의 GC에서 Mark-Summary-Compaction 알고리즘을 채택
- Sweep은 단일 스레드로 Old 영역 전체를 훓어 Rechable 객체(참조되고 있는 객체)를 찾아내는 방식이지만, Summary는 여러 스레드가 Old 영역을 분리하여 훑음
- 또한 효율을 위해 앞선 GC에서 Compaction된 영역을 별도로 훑음
- Mark : 가비지 컬렉션 대상이 아닌(Reachable) 객체를 표시
- Summary : 실제로 가비지를 제거하는 과정, 이를 병렬로 처리하여 효율성이 높음
- Compaction : 가비지 수집 후에 남은 객체들을 메모리 한쪽으로 모으고, 빈 공간으로 한 곳으로 모아 연속된 블록을 만듦, 이는 Heap 내의 각 블록들을 더 효율적으로 관리할 수 있게 함
참고