Daily Dev Q&A: JVM

2025. 11. 24. 18:19·Archive/Daily Dev Q&A

Topic (오늘의 주제)

JVM (Java Virtual Machine)


Why (왜 사용하는가? 왜 중요한가?)

  • 실무: JVM이 없다면 운영체제(Window, Linux, Mac)마다 코드를 다르게 작성하거나 매번 새로 컴파일해야 하는 이식성(Portability) 문제가 발생합니다. "Write Once, Run Anywhere"를 보장하는 핵심입니다.
  • 구조적 의미: 개발자가 직접 메모리를 할당/해제(malloc/free)하지 않아도, **Garbage Collector(GC)**가 자동으로 메모리를 관리해주어 안정성과 생산성을 비약적으로 높여줍니다.
  • 면접 의도: 단순히 자바 문법만 아는지, 아니면 자바 프로그램이 메모리 상에서 어떻게 적재되고 실행되는지 그 내부 원리를 이해하고 있는지(문제 해결 능력)를 파악하기 위함입니다.

Core Concept (핵심 개념 정리)

요소 내용
개념 정의 자바 바이트코드(.class)를 운영체제가 이해할 수 있는 기계어(Native Code)로 변환하여 실행하고, 메모리를 관리해주는 가상 머신.
동작 방식 1. Class Loader: .class 파일을 묶어서 JVM 메모리 영역(Runtime Data Area)으로 로딩

2. Execution Engine: 로딩된 바이트코드를 Interpreter와 JIT Compiler를 통해 기계어로 변환 및 실행

3. Garbage Collector: Heap 영역의 사용하지 않는 객체 메모리 회수
장점/단점 장점: OS에 독립적, 강력한 메모리 관리(GC), 보안성

단점: 실행 전 해석 과정이 있어 C/C++보다 상대적으로 느림(JIT로 많이 개선됨), GC 실행 시점 제어 불가(Stop-the-world)
필요 조건 자바 애플리케이션을 실행하기 위해서는 **JRE(Java Runtime Environment)**가 설치되어 있어야 함 (JRE 안에 JVM 포함).
비교 vs 컴파일 언어(C/C++): C는 소스를 바로 기계어로 컴파일해 빠르지만 OS 종속적임. 자바는 JVM이라는 중간 단계를 거쳐 느리지만 OS 독립적임.

Interview Answer Version (면접 답변식 요약)

"JVM은 자바 애플리케이션을 실행하는 가상 머신으로, 자바 바이트코드를 OS에 맞게 해석하여 실행해주는 역할을 합니다.

JVM을 사용하는 가장 큰 이유는 OS에 종속되지 않고 어디서든 실행 가능하기 때문이며, Garbage Collector를 통해 메모리 관리를 자동화해주기 때문입니다.

핵심 구조로는 바이트코드를 읽어오는 Class Loader, 이를 실행하는 Execution Engine, 그리고 데이터가 저장되는 Runtime Data Area가 있습니다."


Practical Tip (사용시 주의할 점 or 활용 예)

1. 힙 메모리 설정 (OOM 방지)

실무에서 가장 흔히 마주치는 JVM 이슈는 OutOfMemoryError입니다. 서버 환경에 맞춰 힙(Heap) 메모리 사이즈를 적절히 튜닝해야 합니다.

  • -Xms: 초기 Heap 크기
  • -Xmx: 최대 Heap 크기
  • Tip: 운영 환경에서는 힙 크기 조정 오버헤드를 줄이기 위해 보통 -Xms와 -Xmx를 동일하게 설정하는 것을 권장합니다.

2. 메모리 누수 (Memory Leak) 주의

GC가 있다고 해서 메모리 관리를 전혀 안 해도 되는 것은 아닙니다.

  • 잘못된 예: static으로 선언된 List나 Map에 객체를 계속 담고 삭제하지 않으면, GC가 이를 '사용 중인 객체'로 판단하여 회수하지 못합니다. 이는 결국 서버 다운으로 이어집니다.

예상 꼬리 질문 정리

  1. JVM의 메모리 구조(Runtime Data Area)에 대해 설명해 주세요.
    • 답변 포인트: Method(Static), Heap, Stack, PC Register, Native Method Stack 5가지 영역의 역할 구분 (특히 Heap vs Stack).
  2. Garbage Collection(GC)은 언제, 어떻게 동작하나요?
    • 답변 포인트: Minor GC vs Major GC의 차이, Reachability 개념, Stop-the-world 현상.
  3. 자바는 컴파일 언어인가요, 인터프리터 언어인가요?
    • 답변 포인트: 하이브리드임. javac로 컴파일하고, JVM 위에서 인터프리터와 JIT 컴파일러가 혼합되어 실행됨을 설명.

'Archive > Daily Dev Q&A' 카테고리의 다른 글

Daily Dev Q&A: 객체지향언어란? & 왜 JAVA가 객체지향언어인가?  (0) 2025.12.01
Daily Dev Q&A: 자바의 예외 처리(Exception) 구조  (0) 2025.11.28
Daily Dev Q&A: 자바는 컴파일 언어? 인터프린터 언어?  (0) 2025.11.28
Daily Dev Q&A: 자바의 메모리 구조  (0) 2025.11.26
Daily Dev Q&A: 자바의 Garbage Collection  (0) 2025.11.25
'Archive/Daily Dev Q&A' 카테고리의 다른 글
  • Daily Dev Q&A: 자바의 예외 처리(Exception) 구조
  • Daily Dev Q&A: 자바는 컴파일 언어? 인터프린터 언어?
  • Daily Dev Q&A: 자바의 메모리 구조
  • Daily Dev Q&A: 자바의 Garbage Collection
tlsgkstj
tlsgkstj
짱구의 성장 일기
  • tlsgkstj
    코딩하는 짱구
    tlsgkstj
  • 전체
    오늘
    어제
    • 분류 전체보기 (159)
      • About (1)
      • Projects (35)
        • Personal Projects (21)
        • Team Projects (14)
      • Engineering (20)
        • CS & Tools (0)
        • Backend Core (15)
        • Frontend (1)
        • Infra & Cloud (2)
        • AI & Tools (1)
      • Trouble Shooting & Issues (0)
      • Growth & Career (38)
        • Interview Prep (0)
        • Retrospectives (38)
      • Archive (65)
        • TIL (8)
        • Daily Dev Q&A (56)
  • 블로그 메뉴

    • 홈
    • About
    • Projects
    • Tech Stack
    • Dev Log
    • GitHub
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    프로젝트회고
    spring
    커리어리셋
    java
    데브페스트
    클로드코드
    프로덕트개발자
    DevFestIncheon2025
    Project_Review
    network
    경기기후바이브코딩
    SpringBoot
    OrphanRemova
    REACT
    jpa
    backend
    aws_s3
    devlog
    til
    Spring비교
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
tlsgkstj
Daily Dev Q&A: JVM
상단으로

티스토리툴바