본문 바로가기
language/java

Java JVM 구조 이해 완벽 정리

by 죄니안죄니 2026. 5. 26.
반응형

Java JVM 구조 이해 완벽 정리

Java를 제대로 이해하려면 반드시 알아야 하는 핵심이 바로:

JVM(Java Virtual Machine)

입니다.

특히 실무에서는:

  • OutOfMemoryError
  • GC 튜닝
  • 서버 메모리 문제
  • 성능 이슈
  • Spring Boot 장애 분석

까지 JVM 이해가 매우 중요합니다.

초보 시절에는 보통:

Java 실행기
 

정도로만 이해하기 쉽지만,

실제로 JVM은:

  • 클래스 로딩
  • 메모리 관리
  • 바이트코드 실행
  • JIT 최적화
  • GC 수행

까지 담당하는 거대한 런타임 시스템입니다.


1. JVM이 왜 필요한가?

Java 핵심 철학:

Write Once, Run Anywhere
 

즉:

  • Windows
  • Linux
  • Mac

어디서든 동일 코드 실행 가능.


2. Java 실행 전체 흐름

전체 구조를 먼저 보면:

.java 파일
 ↓
javac 컴파일
 ↓
.class(ByteCode)
 ↓
JVM 실행
 ↓
OS / CPU 위에서 동작
 

3. javac란?

Java 컴파일러.

예시:

 
javac Main.java
 

설명:


요소 의미
javac Java compiler
Main.java 컴파일 대상 파일

결과:

Main.class
 

파일 생성.


4. .class 파일이란?

ByteCode
 

파일.

특징:

  • 기계어(X)
  • JVM용 중간 코드(O)

즉:

운영체제 독립적
 

입니다.


5. JVM 전체 구조

JVM 핵심 구성 요소:

ClassLoader
Runtime Data Area
Execution Engine
Garbage Collector
JNI
Native Method Library
 

6. JVM 전체 그림

가장 중요한 전체 흐름:

.class 파일
 ↓
ClassLoader
 ↓
Runtime Memory 적재
 ↓
Execution Engine 실행
 ↓
GC 메모리 관리
 

7. ClassLoader란?

ClassLoader는:

.class 파일을 읽어서 JVM 메모리에 올리는 역할

입니다.

즉:

파일 읽기
↓
클래스 정보 생성
↓
메모리 적재
 

수행.


8. ClassLoader 동작 단계

순서:

Loading
 ↓
Linking
 ↓
Initialization
 

9. Loading

.class 파일 읽기
 

단계.


10. Linking

3단계 존재.


단계 설명
Verification 바이트코드 검증
Preparation static 메모리 준비
Resolution 참조 연결

11. Initialization

static 변수 초기화
static block 실행
 

수행.


12. Runtime Data Area란?

JVM 메모리 영역.

가장 중요합니다.

대표 영역:

Heap
Stack
Method Area
PC Register
Native Method Stack
 

13. Heap 영역

Heap은:

객체(Object)가 저장되는 영역

입니다.

예시:

 
User user = new User();
 

여기서:

new User()
 

객체는 Heap에 생성.


14. Heap 특징


특징 설명
모든 스레드 공유 O
객체 저장 O
GC 대상 O

15. Heap 메모리 그림

Stack:
user -> 0x1000

Heap:
0x1000 -> User 객체
 

즉:

  • 변수는 Stack
  • 실제 객체는 Heap

16. Stack 영역

Stack은:

메서드 실행 정보 저장 영역

입니다.

저장 내용:

  • 지역 변수
  • 매개변수
  • 메서드 호출 정보

17. Stack 특징


특징 설명
스레드별 생성 O
메서드 종료 시 제거 O
매우 빠름 O

18. Stack Frame

메서드 호출 시:

Stack Frame
 

생성.

예시:

 
void test() {

    int x = 10;
}
 

호출 시:

Stack Frame 생성
 

종료 시 제거.


19. StackOverflowError

대표 사례:

 
void recursive() {
    recursive();
}
 

무한 재귀 발생 시:

Stack 공간 초과
 

발생.


20. Method Area

Method Area는:

클래스 메타데이터 저장 영역

입니다.

저장 내용:

  • 클래스 정보
  • 메서드 정보
  • static 변수
  • Constant Pool

21. static 변수는 어디 저장될까?

예시:

 
static int count;
 

→ Method Area 계열 저장.


22. String Pool

 
String s = "Java";
 

문자열 리터럴도 JVM 내부 Pool 구조 사용.

Method Area 계열과 연결.


23. PC Register

현재 실행 중인 JVM 명령 위치 저장.

즉:

현재 어느 ByteCode 실행 중인가
 

추적.


24. Native Method Stack

Java 외부 Native 코드 실행 영역.

예:

C/C++
OS API
 

연동.


25. Execution Engine

Execution Engine은:

ByteCode를 실제 실행하는 엔진

입니다.


26. 실행 방식 2가지


방식 설명
Interpreter 한 줄씩 해석
JIT Compiler 기계어 최적화

27. Interpreter 방식

초기 Java 방식.

ByteCode 한 줄씩 해석 실행
 

장점:

  • 빠른 시작

단점:

  • 반복 실행 느림

28. JIT Compiler란?

HotSpot JVM 핵심 기술.

JIT:

자주 실행되는 코드를 기계어로 변환

합니다.

즉:

반복 코드 탐지
↓
Native Code 변환
↓
CPU 직접 실행
 

29. Java가 생각보다 빠른 이유

많은 사람들이:

Java는 느리다
 

생각하지만 실제로는:

JIT 최적화
 

덕분에 매우 빠른 경우 많음.


30. Garbage Collector(GC)

GC는:

사용하지 않는 객체 자동 제거

기능.

즉:

참조 없는 객체 탐색
↓
Heap 메모리 회수
 

31. GC가 필요한 이유

C/C++:

직접 free()
 

필요.

Java:

GC 자동 메모리 관리
 

가능.


32. JNI(Java Native Interface)

JNI는:

Java와 Native 코드 연결 기술

입니다.

즉:

Java ↔ C/C++
 

연동 가능.


33. JVM 메모리 전체 흐름

전체 구조:

ClassLoader
 ↓
Method Area 클래스 적재
 ↓
Heap 객체 생성
 ↓
Stack 메서드 실행
 ↓
Execution Engine 실행
 ↓
GC 메모리 정리
 

34. Heap vs Stack 핵심 차이


구분 Heap Stack
저장 객체 지역 변수
공유 전체 스레드 스레드별
속도 상대적으로 느림 매우 빠름
GC 대상 O X

35. 실무에서 JVM 이해가 중요한 이유

대표 사례:


문제 JVM 연결
OutOfMemoryError Heap 부족
StackOverflowError Stack 초과
GC 지연 Heap 문제
서버 성능 저하 JIT/GC

36. OutOfMemoryError 예시

객체 계속 생성
↓
Heap 부족
↓
OOM 발생
 

37. JVM 옵션 예시

대표 옵션:

 
java -Xms512m -Xmx2g
 

설명:


옵션 의미
-Xms 초기 Heap 크기
-Xmx 최대 Heap 크기

38. 실무에서 자주 하는 실수

1) Heap과 Stack 혼동

매우 흔함.


2) 객체 생성 비용 무시

객체 너무 많이 만들면:

GC 부담 증가
 

가능.


3) static 메모리 위치 이해 부족

static은 객체가 아니라:

클래스 영역
 

기반.


39. JVM 구조 핵심 요약

ClassLoader
= 클래스 적재

Heap
= 객체 저장

Stack
= 메서드 실행

Execution Engine
= ByteCode 실행

GC
= 메모리 회수
 

40. 정리

JVM(Java Virtual Machine)은 단순 실행기가 아닙니다.

실제로는:

  • 클래스 로딩
  • 메모리 관리
  • 바이트코드 실행
  • GC
  • JIT 최적화

를 담당하는 Java 핵심 런타임 시스템입니다.

특히 실무에서는:

  • Heap/Stack 구조
  • GC 동작
  • JIT Compiler
  • ClassLoader

를 이해하는 것이 매우 중요합니다.

다음 글에서는:

ClassLoader 동작 원리

를 Parent Delegation Model, Bootstrap ClassLoader, Spring Boot Fat Jar 구조까지 포함해서 깊게 정리해보겠습니다.

반응형

댓글