Programming/Java

면접에서 진짜 자주 나오는 자바 질문 - 섹션 7. JVM, GC, 자바 런타임 메커니즘

마실개 2025. 4. 17. 16:21
반응형

자바 면접에서 빠지지 않고 나오는 분야 중 하나가 바로 JVM과 가비지 컬렉션(GC) 관련 질문입니다.
"자바는 자동 메모리 관리 언어라며? 그런데 왜 GC를 그렇게 묻는 걸까?"
이 질문에 대해선 아주 명확한 답이 있습니다.

바로, JVM과 GC에 대한 이해도가 시스템의 성능과 안정성을 좌우하기 때문입니다.
이번 포스트에서는 JVM의 구조부터 GC의 종류, 메모리 누수 사례, 그리고 실행 흐름까지, 면접에 꼭 나오는 핵심 개념만 정리해봤습니다.


1. JVM의 구조와 역할

JVM(Java Virtual Machine)은 자바 바이트코드를 실행하는 가상 머신으로, 다음과 같은 구조로 구성됩니다:

  • Class Loader: .class 파일을 메모리에 로딩
  • Runtime Data Areas
    • Heap: 객체 저장 (GC 대상)
    • Stack: 메서드 호출 스택, 지역 변수 저장
    • Method Area(Metaspace): 클래스 메타데이터 저장
  • Execution Engine: 바이트코드 실행
    • 인터프리터 + JIT(Just-In-Time) 컴파일러
  • Native Interface & Libraries
JVM은 자바 코드가 OS와 독립적으로 실행될 수 있도록 하며, 동시에 메모리와 자원 관리를 통합적으로 수행합니다.

2. 가비지 컬렉션(GC)의 원리와 종류

GC는 JVM이 더 이상 사용되지 않는 객체를 감지하여 메모리를 자동으로 회수하는 메커니즘입니다.

GC의 동작 방식

  • Mark: 어떤 객체가 참조되고 있는지 식별
  • Sweep: 참조되지 않는 객체를 정리
  • Compact: 조각난 메모리를 정리해 연속된 공간 확보

주요 GC 종류

GC 종류 특징
Serial GC 단일 스레드, 적은 리소스에서 유리
Parallel GC Throughput 중시, 병렬 처리 지원
CMS 낮은 지연시간 확보, 일부 병렬 처리
G1 GC Region 기반, pause 예측 가능
ZGC / Shenandoah 초저지연, 대용량 힙 지원 (JDK11+)

면접에서 자주 묻는 포인트:

GC는 성능 최적화, 장애 대응 시 매우 중요한 요소로, 최소한 G1과 CMS의 차이점 정도는 명확히 설명할 수 있어야 합니다.

3. 자바에서 메모리 누수가 발생하는 경우

GC가 있더라도 참조가 끊기지 않으면 메모리는 회수되지 않습니다.
자바에서도 메모리 누수가 발생할 수 있는 대표적인 예시는 다음과 같습니다:

  • 정적 컬렉션(static Map, List)에 객체 저장 후 해제하지 않음
  • 이벤트 리스너 등록 후 제거 누락
  • 외부 자원(File, Socket) 사용 후 close() 누락
  • ThreadLocal 사용 후 remove() 안함

면접에서 자주 묻는 포인트:

“GC가 있는데 왜 메모리 누수가 발생하죠?” → 참조가 남아 있으면 GC가 회수하지 못하기 때문입니다.


4. 자바 프로그램의 실행 흐름

자바는 다음과 같은 순서로 실행됩니다:

  1. .java 파일 작성
  2. javac로 .class 바이트코드 생성
  3. JVM이 ClassLoader로 .class 로딩
  4. Execution Engine이 바이트코드 실행 (인터프리트 + JIT)
  5. GC 및 기타 런타임 서비스 작동
이 흐름을 이해하고 있으면, 컴파일 오류, 클래스 로딩 실패, GC 병목 등의 문제를 빠르게 파악할 수 있습니다.

5. JVM 튜닝을 위한 주요 옵션

JVM의 실행 성능은 아래와 같은 옵션을 통해 조절할 수 있습니다:

옵션 설명
-Xms, -Xmx 힙 메모리 초기/최대 크기
-XX:+UseG1GC GC 방식 지정 (G1 GC 사용)
-Xlog:gc GC 로그 출력 (JDK9+)
-XX:MaxMetaspaceSize 메타스페이스 최대 크기
-XX:+PrintGCDetails GC 상세 로그 출력
GC 로그를 분석하면 애플리케이션의 메모리 사용 패턴과 병목 구간을 파악할 수 있습니다.

마무리

JVM과 GC는 단순한 시스템 지식이 아니라, 현업에서 성능 최적화와 장애 분석의 핵심 도구입니다.
면접에서는 단편적인 지식보다, “왜 그렇게 설계되어야 하는가?”, “실무에서는 어떻게 대응하는가?”에 대한 사고력을 중점적으로 평가합니다.

반응형