본문 바로가기
Web Programing/JAVA

자바 가비지 컬렉션 개념 이해

by 기록하는 초보 2024. 3. 5.
반응형

자바 가비지 컬렉션은 자바 프로그램 메모리 관리의 핵심 요소 중 하나입니다. 이러한 메모리 관리는 프로그램의 성능과 안정성을 크게 좌우하므로, 가비지 컬렉션의 원리와 동작을 이해하는 것은 자바 개발자에게 중요합니다. 이번 글에서는 가비지 컬렉션에 대해서 알아보고 개념과 동장 원리에 대해서 이해해 보겠습니다.

 

가비지 컬렉션(Garbage Collection) 개념

가비지 컬렉션(Garbage Collection, GC)이란 프로그램에서 더 이상 사용되지 않고 참조되지 않는 객체를 찾아내서, 이를 삭제하여 메모리를 재활용하는 프로세스입니다. 이 과정을 통해 메모리 누수와 불필요한 메모리 점유를 막아 프로그램의 효율성을 높이는 역할을 합니다.

 

가바지 컬렉션의 이해

마크 앤 스위프(Mark and Sweep) 알고리즘

1. 마킹 단계 : 모든 변수를 스캔하면서 각 변수가 참조하고 있는 객체를 마크합니다.

2. 스위핑 단계 : 마크되지 않은 객체들을 힙 메모리에서 제거합니다.

3. 콤팩션 단계 : 객체가 가비지 컬렉션 된 후에 메모리 단편화를 줄이기 위해 남아있는 객체를 이동시킵니다.

동작 시점

가비지 컬렉션은 메모리가 부족하거나 JVM()이 판단하기에 적절한 시점에 실행되지만, System.gc() 명령을 통해 개발자가 촉진할 수는 있으나 일반적으로 권장되지 않습니다.

 

힙(Heep) 메모리 영역의 구분

영 제너레이션(Young Generation)

새로 생성된 객체들이 할당되는 영역으로, 주로 마이너 GC가 발생합니다.

에덴(Eden) 영역과 서바이버(Survivor) 영역으로 나뉩니다.

올드 제너레이션(Old Generation)

오래된 객체들이 저장되는 영역으로, 마이너 GC를 거쳐 살아남은 객체들이 이곳으로 이동합니다.

주로 메이저 GC(혹은 풀 GC)가 발생합니다.

 

가비지 컬렉션의 주요 구현체

Serial GC : 단일 스레드로 GC를 수행하는 가장 기본적인 GC입니다.

Parallel GC : 멀티 스레드를 이용해서 GC를 수행하는 방식입니다.

Concurrent Mark Sweep(CMS) GC : 힙 메모리를 마킹하면서 동시에 스위핑을 수행하는 GC입니다.

G1(Garbage-First) GC : 힙을 여러 영역으로 나눠서 가장 가비지가 많은 영역부터 수집하는 방식입니다.

Z GC : 낮은 지연시간을 목표로 하는 최근 GC입니다.

 

가비지 컬렉션의 장단점

장점

메모리 관리를 자동으로 해주기 때문에, 개발자가 메모리 누수 등의 문제로부터 비교적 자유로울 수 있습니다.

메모리 사용 효율성 향상 및 프로그램 안정성 유지에 기여합니다.

단점

GC가 발생할 때 프로그램의 실행 속도가 느려지거나 일시적으로 멈출 수 있습니다. (STW, Stop-the-World).

실시간 시스템에는 적합하지 않을 수 있습니다.

 

메모리 관리는 소스트웨어 개발의 중요한 측면 중 하나입니다. 가비지 컬렉션에 대한 이해는 프로그래밍의 성능과 안정성을 확보하는데 필수 지식이라고 할 수 있습니다.

반응형