본문 바로가기
Java

[Java] JVM (Java Virtual Machine)

by sgyeong 2025. 9. 9.

JVM (Java Virtual Machine)

 

자바 프로그램이 OS에 독립적으로 실행될 수 있도록 만들어주는 가상 머신

자바 소스코드 (.java) → 컴파일러 (javac)   바이트코드 (.class)로 변환되고, JVM은 이 바이트 코드를 실제로 실행하는 역할을 한다.

 

 

JVM의 역할

 

- 코드 실행 : 바이트 코드를 기계어로 번역해서 실행한다.

- 메모리 관리 : 힙 메모리, 스택 메모리 관리

- Garbage Collector로 불필요한 객체를 제거한다.

- OS 추상화 : OS나 하드웨어에 직접 의존하지 않고, 같은 바이트코드가 Windows, macOS, Linux 어디서든 실행 가능하다.

- 보안 : 클래스 로더를 통해 안전한 코드 실행 환경을 제공한다.

 

 

JVM의 구조

 

JVM의 내부는 클래스 로더 (Class Loader), 실행 엔진 (Execution Engine), 런타임 데이터 영역 (Runtime Data Area), 네이티브 인터페이스 (JNI)로 나뉘어 있다.

 

 

동작 방식

 

클래스를 읽어서 메모리에 올림 → 실행 엔진이 바이트 코드를 해석하고 컴파일 → 런타임 데이터 영역에 저장 및 관리 →Garbage Collector로 메모리 정리 → 필요할 시 네이티브 라이브러리와 연결

 

1. 클래스 로더 (Class Loader)

- .class 파일을 JVM으로 읽어들이는 역할을 한다.

- 로딩(Loading) → 링크 (Linking) → 초기화 (Initialization) 과정을 거친다.

- 동적 로딩 (Dynamic Loading)이 가능하다. →  프로그램 실행 중 필요한 클래스만 메모리에 올린다.

 

2. 런타임 데이터 영역 (Runtime Data Area)

JVM 실행 시 할당되는 메모리 영역이다.

- 메서드 영역 (Method Area) : 클래스의 구조(메타데이터), static 변수, 메서드 코드를 저장한다.

- 힙 영역 (Heap) : new로 생성한 객체를 저장한다. Garbage Collector 가 관리한다.

- 스택 영역 (JVM Stack) : 각 스레드마다 생성한다. 메서드 호출 시 프레임 단위로 관리한다. (지역변수, 매개변수, 임시 값 저장)

- 프로그램 카운터 레지스터 (PC Register) : 현재 실행중인 JVM 명령어 주소

- 네이티브 메서드 스택 (Native Method Stack) : 자바 외 언어로 작성된 네이티브 메서드 실행 시 사용한다.

 

3. 실행 엔진 (Execution Engine)

클래스 로더가 올린 바이트코드를 실제 기계어로 번역해 실행한다.

- 방식

  Interpreter : 한 줄씩 해석 →  속도가 느리다.

  JIT Compiler : 자주 실행되는 코드를 기계어로 변환해 캐싱 →  성능 향상

  Garbage Collector : 더 이상 참조되지 않는 객체를 메모리에서 해제한다.

 

4. JNI (Java Native Interface)

자바 코드에서 C, C++같은 네이티브 라이브러리를 호출할 수 있도록 연결해주는 인터페이스

 

 

 

 

 

 

참고

https://steady-coding.tistory.com/305

 

JVM 메모리 구조란? (JAVA)

안녕하세요? 코딩 중독입니다. 오늘은 JVM 메모리 구조에 대해 알아보겠습니다. JVM이란? JVM 메모리 구조를 설명하기 전에 JVM이 무엇인지 알아야 합니다. JVM은 Java Virtual Machine의 약자로, 자바 가상

steady-coding.tistory.com

https://devlove.tistory.com/entry/Java-JVM-%EA%B5%AC%EC%A1%B0-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-JVM%EC%9D%84-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0

 

[Java] JVM 구조 이해하기, JVM을 알아야 하는 이유

Java 개발자라면 누구나 들어봤을 JVM에 대해, 공부해야 되는 이유와 그 구조에 대해서 정리해 봤습니다. JVM(Java Virtual Machine)은 Java로 개발된 프로그램을 실행하기 위한 가상 머신입니다. 구성 요

devlove.tistory.com

 

'Java' 카테고리의 다른 글

[Java] URLConnection / HttpURLConnection  (0) 2025.09.10
[Java] 인터페이스 (Interface)  (0) 2025.09.10
Java  (2) 2025.08.28
[Java] Lombok  (0) 2024.10.28
[Java] 논리연산자  (0) 2024.10.28