이 글을 작성하기 위해 지난 한 달 동안 Garbage Collection(이하 GC)에 대해 자세히 공부해보았다. 이번 글에서는 Java에서 사용하는 Generational GC에 대해 알아보며, Naver D2 블로그의 Java Garbage Collection 글과 Java HotSpot VM G1GC 글을 토대로 작성했다. 계속해서 글을 읽기 전에 아래 네 글을 읽고 오는 것이 좋다. [Garbage Collection] (1) 개념, 유래, 한계, GC에 대해 알아야 하는 이유 [Garbage Collection] (2) GC 알고리즘 - Reference Counting Algorithm(참조 횟수 카운팅) [Garbage Collection] (3) GC 알고리즘 - Tracing Garba..
GC
지난 2편에 이어 Garbage Collection(이하 GC, 가비지 컬렉션)의 알고리즘 중 Tracing GC(추적 기반)에 대해 알아본다. Tracing GC에서는 아래 알고리즘들에 대해 작성할 예정인데, 꽤나 많은 양이 예상되므로 두 편으로 글을 나눠 쓰려고 한다. - Mark-Sweep Algorithm - Mark-Sweep-Compact Algorithm - Tri-color Marking Algorithm (Incremental GC) - Copying Algorithm (Incremental GC) - Generational Algorithm (Incremental GC) 이 글에서는 Reference Counting GC를 보완하며 만들어진 Tracing GC의 원조격 알고리즘이라 할 ..
지난 1편에 이어, 이번 글부터 본격적으로 Garbage Collection(이하 GC, 가비지 컬렉션)의 알고리즘에 대해 작성한다. 작동 방식에 따라 크게 아래 두 가지로 분류 가능한데, 1. 추적 기반 GC (Tracing Garbage Collection) 2. 참조 횟수 카운팅 GC (Reference Counting Garbage Collection) 2번부터 먼저 알아본다. Reference Counting GC 개념 Reference Counting GC는 GC의 초기 알고리즘으로, "Garbage를 발견하는 것"에 초점이 맞추어져 있다. 어느 한 메모리가 다른 메모리를 얼마나 많이 참조하는지 횟수를 세어서 메모리 접근 가능과 불가능을 나누는 방식이다. 예를 들어, A 메모리가 B 메모리를 ..
면접 단골 질문인 Garbage Collection(이하 GC, 가비지 컬렉션)에 대해 알아본다. 이 글에서는 글 제목처럼, 개념 / 유래 / 한계 / GC에 대해 알아야 하는 이유 등에 대해 알아본다. 개념 Garbage Collection, 메모리 관리 방법 중 하나로 말 그대로 쓰레기를 수집하는 기능이다. 여기서 "쓰레기"란 실제 쓰레기를 말하는 것이 아니라, 개발자가 동적으로 할당한 메모리 영역 중 더 이상 쓰이지 않는 영역을 말하며, 가비지 컬렉션은 그러한 영역을 자동으로 찾아내어 해제하는 기능이다. 보통 메모리에 접근이 불가능하면 "쓰레기"로 본다. 오래된 프로그래밍 언어 중 하나인 LISP의 아버지라 불리는 존 매카시가 1959년에 LISP의 메모리 관리를 위해 처음 만들었다고 알려져 있다...