[Java] 7. Garbage Collector

김민주·2025년 3월 22일

Programming Language

목록 보기
12/12
post-thumbnail

3줄 요약 (CS 면접 답변용)

자바 GC는 JVM이 동작 중인 프로그램의 메모리를 자동으로 관리하는 기능입니다.  
사용하지 않는 객체를 탐지해 메모리에서 제거하고, 메모리 누수를 방지해줍니다.  
덕분에 개발자는 new로 생성만 하고, 해제는 신경 쓰지 않아도 됩니다.

✅ 추가 질문 1. "GC는 언제 실행되나요?"

GC는 JVM이 메모리가 부족하다고 판단하거나, 
명시적으로 System.gc()를 호출했을 때 실행됩니다.  
하지만 보통은 JVM이 알아서 적절한 시점에 실행하기 때문에
개발자가 직접 호출하는 경우는 거의 없습니다.

✅ 추가 질문 2. "GC가 메모리를 어떻게 관리하나요? (원리 설명해보세요)"

자바 GC는 살아있는 객체와 더 이상 사용하지 않는 객체를 구분해서 
사용하지 않는 객체만 메모리에서 제거합니다.  
이걸 위해 주로 'Generational GC' 방식을 사용하는데, 
객체를 Young, Old 영역으로 나누고 
새로 만들어진 객체는 Young 영역에서 먼저 관리하다가 살아남으면 Old로 넘깁니다.

✅ 추가 질문 3. "GC의 단점이나 주의할 점이 있나요?"

GC가 실행되는 동안 애플리케이션이 멈추는 'Stop the World' 현상이 발생할 수 있습니다.  
이로 인해 짧은 순간이지만 응답 속도가 느려질 수 있어서 실시간 서비스에서는 주의가 필요합니다.

✅ 추가 질문 4. "System.gc() 직접 호출해도 되나요?"

원칙적으로는 권장하지 않습니다.  
System.gc()는 JVM에게 GC 실행을 요청하는 것일 뿐, 
반드시 실행되는 것도 아니고 오히려 성능을 떨어뜨릴 수 있습니다.

✅ 추가 질문 5. "Generational GC가 뭔가요?"

Generational GC는 객체를 생성된 시점과 생존 기간에 따라
Young, Old 영역으로 나눠 관리하는 방식입니다.  
짧게 쓰이는 객체는 Young에서 빠르게 회수하고, 
오래 쓰는 객체는 Old로 보내 관리 효율을 높이는 구조입니다.

Java GC vs. Python GC

구분Java GCPython GC
관리 대상JVM Heap 영역 전체객체(참조 카운트 기반)
방식Reachability Analysis (살아있는 객체 탐색)참조 카운트 + 순환 참조 탐지용 GC
특징병렬 / 세대별 등 다양한 GC 튜닝 가능비교적 단순하지만 순환 참조 처리용 GC 존재
profile
낭비하지마 네 시간은 은행🐰

2개의 댓글

comment-user-thumbnail
2025년 3월 24일

감사합니다 지피티!

1개의 답글