1. JVM이란?
JVM(Java Virtual Machine)은 자바 애플리케이션이 실행되는 환경을 제공하는 가상 머신입니다.
자바 코드를 작성하고 컴파일하면 바이트코드(.class)로 변환되는데, 이 바이트코드를 실행하는 역할을 JVM이 수행합니다.
JVM은 플랫폼 독립성을 제공하며, WORN "Write Once, Run Anywhere"의 기반이 됩니다.
2. JVM의 구성 요소
JVM은 크게 클래스 로더(Class Loader), 메모리 구조, 실행 엔진(Execution Engine)으로 나눌 수 있습니다.
2.1 클래스 로더(Class Loader)
- 자바 애플리케이션의
.class 파일(바이트코드)을 JVM으로 로드
- 필요한 클래스만 로드하며, 동적 로드 방식을 사용
- 로딩, 링크(Linking), 초기화(Initialization) 단계를 거침
2.2 메모리 구조 (Runtime Data Area)
- 메서드 영역(Method Area)
- 클래스의 메타데이터, 상수 풀, 정적 변수 저장
- 힙 영역(Heap)
- 객체와 배열이 저장되는 영역
- JVM의 Garbage Collector가 관리
- 스택 영역(Stack)
- 메서드 호출 시 생성되는 프레임을 저장
- 지역 변수, 매개변수, 연산 중간 결과 저장
- PC 레지스터(Program Counter Register)
- 네이티브 메서드 스택(Native Method Stack)
- 자바가 아닌 네이티브 코드(C, C++ 등)의 메서드 호출을 지원
2.3 실행 엔진 (Execution Engine)
- 인터프리터
- 바이트코드를 한 줄씩 해석하고 실행
- 초기 실행 속도는 빠르지만, 반복문에서 성능 저하 발생
- JIT(Just-In-Time) 컴파일러
- 자주 실행되는 코드를 기계어로 번역해 성능 최적화
- Garbage Collector
3. JVM의 작동 과정
- 소스 코드 작성
- 컴파일
- 자바 컴파일러(
javac)를 사용해 .class 파일(바이트코드) 생성
- 클래스 로딩
- 바이트코드 실행
- 실행 엔진이 바이트코드를 해석하거나 JIT 컴파일러를 통해 실행
4. JVM의 특징
-
플랫폼 독립성
- 자바 코드는 특정 운영 체제에 종속되지 않음
- JVM이 운영 체제에 맞는 실행 환경을 제공
-
Garbage Collection
-
보안성
- JVM은 애플리케이션을 격리해 실행하므로 시스템 자원 보호
-
성능 최적화
- JIT 컴파일러와 같은 기술로 실행 속도를 높임
5. JVM의 장점과 단점
장점
- 코드의 플랫폼 독립성 제공
- 자동 메모리 관리(Garbage Collection)
- 다양한 성능 최적화 기술(JIT, HotSpot) 제공
단점
- 가상 머신 위에서 동작하므로 네이티브 코드보다 느릴 수 있음
- 초기 JVM 로딩 속도가 느림
- 메모리 사용량이 많아질 수 있음
6. 마무리
JVM은 자바의 강력한 플랫폼 독립성을 뒷받침하는 핵심 기술로 자바 개발자가 알아야 할 중요한 주제 중 하나입니다.
Garbage Collection을 통해 메모리를 자동 관리하면서도 성능 최적화를 지원하는 점이 인상 깊었습니다.
하지만 JVM 내부 구조와 동작 방식을 이해하지 못하면 성능 튜닝이 어렵다는 점도 느꼈습니다. 프로젝트에서 발생한 메모리 누수 문제를 해결하며 JVM 메모리 구조와 Garbage Collector의 동작 원리를 배우게 되었습니다.