자바 가상 머신(Java Virtual Machine): 두 판 사이의 차이
기술노트
(컴퓨터 과학 용어 정리 - 자바 가상 머신(Java Virtual Machine) 추가) |
편집 요약 없음 |
||
1번째 줄: | 1번째 줄: | ||
== | == ☕ 자바 가상 머신(Java Virtual Machine) == | ||
시스템 메모리를 관리하면서, 자바 기반 애플리케이션을 위해 이식 가능한 실행 | 시스템 메모리를 관리하면서, 자바 기반 애플리케이션을 위해 **이식 가능한 실행 환경**을 제공함. | ||
[[File:http://www.itworld.co.kr/sites/default/files/image/2018/09/jw_jvm_overview_3x2_1200x800-100758586-large(1).jpg|center|600px]] | |||
JVM은 다른 프로그램을 실행시키는 것이 목적이며, 아래와 같은 기능을 갖추고 있음: | |||
* 자바 프로그램이 어느 기기나 운영체제 상에서도 실행될 수 있도록 함 | |||
* 프로그램 메모리를 관리하고 최적화함 | |||
<syntaxhighlight lang="java"> | |||
<syntaxhighlight> | |||
JVM은 코드를 실행하고, 해당 코드에 대해 런타임 환경을 제공하는 프로그램에 대한 사양임 | JVM은 코드를 실행하고, 해당 코드에 대해 런타임 환경을 제공하는 프로그램에 대한 사양임 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
개발자들이 말하는 JVM은 일반적으로 *자바 애플리케이션을 실행하고 관리하는 프로세스*를 의미함. 클래스 로더를 통해 자바 애플리케이션을 읽고, 자바 API와 함께 실행하며, 운영체제와 자바 애플리케이션 사이의 **중개자 역할**을 수행함. | |||
개발자들이 말하는 JVM은 | |||
---- | |||
=== 🧠 JVM에서의 메모리 관리 === | |||
JVM 실행에 있어서 가장 일반적인 상호작용은 힙과 스택의 메모리 사용을 확인하는 것임. | |||
==== 🔁 실행 과정 ==== | |||
1. 프로그램 실행 시, JVM은 OS로부터 메모리를 할당받음 | |||
2. 자바 컴파일러(JAVAC)가 `.java` 소스를 `.class` 바이트코드로 변환 | |||
3. 클래스 로더가 class 파일들을 JVM 메모리 영역으로 로딩 | |||
4. Execution Engine이 바이트코드를 해석 | |||
5. 실행 중 스레드 동기화, 가비지 컬렉션 등을 수행하며 프로그램이 동작 | |||
[[File:https://i.imgur.com/Vy1JC1b.png|center|600px]] | |||
---- | |||
=== 🛠 주요 구성 요소 === | |||
==== 📘 자바 컴파일러 ==== | |||
* 자바 소스코드(`.java`)를 바이트코드(`.class`)로 변환함 | |||
==== 📦 클래스 로더 ==== | |||
* JVM은 런타임에 클래스를 처음 참조할 때 동적으로 로드함 | |||
* 이 작업을 담당하는 것이 클래스 로더 | |||
---- | |||
=== 🧱 JVM 메모리 영역 구조 (Runtime Data Areas) === | |||
JVM이 운영체제에서 실행되면서 할당받는 메모리 영역 | |||
'''메서드 영역''' | {| class="wikitable" | ||
|+ JVM 메모리 영역 설명 | |||
! 영역 !! 설명 | |||
|- | |||
| '''PC 레지스터''' || 각 스레드가 현재 실행 중인 명령어의 주소를 저장 | |||
|- | |||
| '''JVM 스택''' || 지역 변수, 매개변수, 메서드 호출 정보를 저장 | |||
|- | |||
| '''네이티브 메서드 스택''' || 네이티브(기계어) 메서드를 위한 공간 | |||
|- | |||
| '''힙(Heap)''' || 객체, 배열 등 런타임에 생성된 데이터 저장. 가비지 컬렉션 대상 | |||
|- | |||
| '''메서드 영역''' || 클래스 정보, 상수, 정적 변수, 메서드 바이트코드 저장 | |||
|} | |||
* 힙과 메서드 영역은 모든 스레드가 **공유** | |||
* PC 레지스터, JVM 스택 등은 **스레드마다 개별** | |||
---- | |||
=== 🧹 가비지 컬렉션(Garbage Collection) === | |||
자바는 JVM이 메모리를 자동으로 관리함 | |||
* 불필요해진 객체를 탐색해 제거하고, 그 메모리를 재사용 | |||
* 힙 영역에서 동작하며, 주기적으로 작동 | |||
''' | '''가비지 컬렉션 절차:''' | ||
# 참조되지 않은 객체 탐색 | |||
# 해당 객체 메모리 회수 | |||
# 힙 공간 정리 및 재사용 | |||
---- |
2025년 6월 28일 (토) 07:59 판
☕ 자바 가상 머신(Java Virtual Machine)
시스템 메모리를 관리하면서, 자바 기반 애플리케이션을 위해 **이식 가능한 실행 환경**을 제공함.
JVM은 다른 프로그램을 실행시키는 것이 목적이며, 아래와 같은 기능을 갖추고 있음:
- 자바 프로그램이 어느 기기나 운영체제 상에서도 실행될 수 있도록 함
- 프로그램 메모리를 관리하고 최적화함
JVM은 코드를 실행하고, 해당 코드에 대해 런타임 환경을 제공하는 프로그램에 대한 사양임
개발자들이 말하는 JVM은 일반적으로 *자바 애플리케이션을 실행하고 관리하는 프로세스*를 의미함. 클래스 로더를 통해 자바 애플리케이션을 읽고, 자바 API와 함께 실행하며, 운영체제와 자바 애플리케이션 사이의 **중개자 역할**을 수행함.
🧠 JVM에서의 메모리 관리
JVM 실행에 있어서 가장 일반적인 상호작용은 힙과 스택의 메모리 사용을 확인하는 것임.
🔁 실행 과정
1. 프로그램 실행 시, JVM은 OS로부터 메모리를 할당받음 2. 자바 컴파일러(JAVAC)가 `.java` 소스를 `.class` 바이트코드로 변환 3. 클래스 로더가 class 파일들을 JVM 메모리 영역으로 로딩 4. Execution Engine이 바이트코드를 해석 5. 실행 중 스레드 동기화, 가비지 컬렉션 등을 수행하며 프로그램이 동작
🛠 주요 구성 요소
📘 자바 컴파일러
- 자바 소스코드(`.java`)를 바이트코드(`.class`)로 변환함
📦 클래스 로더
- JVM은 런타임에 클래스를 처음 참조할 때 동적으로 로드함
- 이 작업을 담당하는 것이 클래스 로더
🧱 JVM 메모리 영역 구조 (Runtime Data Areas)
JVM이 운영체제에서 실행되면서 할당받는 메모리 영역
영역 | 설명 |
---|---|
PC 레지스터 | 각 스레드가 현재 실행 중인 명령어의 주소를 저장 |
JVM 스택 | 지역 변수, 매개변수, 메서드 호출 정보를 저장 |
네이티브 메서드 스택 | 네이티브(기계어) 메서드를 위한 공간 |
힙(Heap) | 객체, 배열 등 런타임에 생성된 데이터 저장. 가비지 컬렉션 대상 |
메서드 영역 | 클래스 정보, 상수, 정적 변수, 메서드 바이트코드 저장 |
- 힙과 메서드 영역은 모든 스레드가 **공유**
- PC 레지스터, JVM 스택 등은 **스레드마다 개별**
🧹 가비지 컬렉션(Garbage Collection)
자바는 JVM이 메모리를 자동으로 관리함
- 불필요해진 객체를 탐색해 제거하고, 그 메모리를 재사용
- 힙 영역에서 동작하며, 주기적으로 작동
가비지 컬렉션 절차:
- 참조되지 않은 객체 탐색
- 해당 객체 메모리 회수
- 힙 공간 정리 및 재사용