ABOUT

성능과 운영 안정성을 함께 끌어올리는 개발자입니다.

92% Positional Error Reduction
79% p95 Latency Improvement
90%+ Long Tasks Reduction

2022.02 · 한국장학재단

우수 멘티

한국장학재단 사회 리더 대학생 멘토링 IT

2022.10 · 동작구청

우수 인재상

동작구청 우수 SW 인재

2025.05 · (주) 그랩

프로그래밍 우수상

(주) 그랩 우수 프로그램 개발

2025.05 · AWSKRUG

AWS한국사용자모임 발표

AI agent 스크립트 튜닝 관련 발표

ComputerScience

Development

Engineering

Trouble Shooting

GUESTBOOK

첫 마음부터
함께 나누는 온기

방명록 작성하러 가기

SUBSCRIBE

최신소식을
편하게 만나보세요.

JVM (Java Virtual Machine)

정의
자바 바이트코드(.class)를 실행하는 “가상 실행 엔진”입니다.

자바의 핵심 철학은 Write Once, Run Anywhere입니다. 같은 .class(바이트코드)를 여러 운영체제에서 실행할 수 있는 이유가 바로 JVM입니다. JVM은 OS/CPU 차이를 숨기고, 바이트코드를 각 환경에 맞게 실행합니다.

실무 관점에서는 JVM이 단순 실행기 역할만 하는 게 아니라, 메모리 관리(GC), JIT 최적화, 스레드 실행까지 책임지기 때문에 성능/장애 분석에서 JVM 이해가 곧 경쟁력이 됩니다.

핵심 메시지

“JVM은 바이트코드 실행기이면서
동시에 메모리(GC) + JIT 최적화 + 스레드 런타임이다.”

- 서버 성능의 절반은 JVM이 결정한다 -
실행 흐름
자바 코드는 JVM에서 클래스 로딩 → 바이트코드 실행 → 최적화(JIT)로 동작합니다.
1
Class Loader 클래스(.class)를 메모리로 로딩하고 검증
2
Execution Engine 인터프리터로 실행하다가 자주 쓰는 코드는 JIT로 컴파일
3
Runtime Data Areas Heap/Stack/Method Area 등 런타임 메모리 영역 관리
4
GC(가비지 컬렉터) Heap에서 사용하지 않는 객체를 정리해 메모리를 회수
런타임 메모리 구조
JVM 메모리는 크게 HeapStack이 핵심입니다.
영역 특징 설명
Heap 공유, GC 대상 객체(new)가 저장되는 영역. GC가 여기서 메모리를 회수
Stack 스레드별, LIFO 메서드 호출 프레임(지역변수/리턴주소). 재귀 과다 시 StackOverflow
Method Area 공유 클래스 메타데이터/상수/메서드 정보(런타임 구조)
Native 영역 OS 연동 JNI 등 네이티브 코드 호출/버퍼/직접 메모리 활용

💡 TIP / 참고사항

실무에서 “응답이 가끔 멈춘다”는 이슈가 있으면 GC Stop-The-World가 원인인 경우가 많습니다.
그래서 JVM 튜닝은 보통 “더 빠르게”보다 멈춤을 줄이는 것(지연 안정성)이 목표가 됩니다.

 

실전 관점
JVM을 알면 성능/장애를 “원인까지” 좁힐 수 있습니다.

👍 GOOD (JVM 이해로 해결되는 것)

  • 메모리 폭증/누수 의심 → Heap/GC 로그로 판단
  • 지연 스파이크 → STW, 스레드 대기, 락 경합 추적
  • CPU 사용률 상승 → JIT/핫메서드/무한루프 가능성 점검
  • 스레드가 멈춤 → 스레드 덤프로 블로킹 지점 확인

👎 BAD (흔한 오해)

  • “GC는 자동이니까 신경 안 써도 된다” → 지연 문제의 핵심
  • “Heap만 키우면 해결된다” → STW가 더 길어질 수도 있음
  • “스레드 늘리면 빨라진다” → 락/커넥션 풀/컨텍스트 스위칭 병목

✅ 핵심 요약

  • ✔️ JVM은 바이트코드 실행 엔진이며, OS/CPU 차이를 추상화한다.
  • ✔️ 내부적으로 클래스 로딩, 실행 엔진(JIT), 런타임 메모리, GC가 핵심 구성이다.
  • ✔️ 실무에서는 JVM 이해가 지연/메모리/스레드 장애 원인 추적에 직접 연결된다.
728x90