반응형
JVM(Java Virtual Machine)
- 자바 가상머신, 자바 어플리케이션을 실행하는 가상 머신
- 자바와 OS사이의 중개자 역할, OS에 구애받지 않고 독립적으로 작동이 가능하도록 함
- 인터프리터와 JIT컴파일러를 통해 바이트 코드를 각 운영체제에 맞는 기계어로 해석시켜 실행
- 메모리 관리, 가비지 컬렉션을 수행
- 가비지 컬렉션 (Garbage Colleciton) : 유효하지 않은 메모리인 가비지를 정리하여 메모리를 정리하는 것
- 스택기반 => 독립적으로 사용할 수 있도록

1) Class Loader (클래스 로더)
- 클래스파일을 Runtime Data Area의 메서드 영역으로 불러오는 역할
2) Execution Engine (실행 엔진)
- 클래스 파일을 실행 가능하도록 해석
3) Runtime Data Area
- 런타임 시, 클래스 데이터와 같은 메타 데이터와 실제 데이터가 저장되는 곳
- OS로부터 할당받은 메모리 영역
- JVM을 생성하면 Heap, Method Area는 모든 스레드가 공유하고, 각 스레드가 시작될 때 마다 PC Register, Stack,Native Method Stack이 생성되고 종료될때 사라짐

(1) Heap
- 객체를 동적으로 생성하게 되면 인스턴스가 Heap 영역의 메모리에 할당
- GC의 대상이 되는 영역
(2) Method Area
- 클래스 정보를 처음 메모리에 올릴 때, 초기화되는 대상을 저장하기 위한 영역
- Field/Method/Type Information
(3) Thread
- PC Register
- JVM은 스택기반의 가상머신으로, CPU에 직접 접근하지 않고 Stack에서 주소를 뽑아서 가져오고 이 주소를 PC Register에 저장
- 현재 어떤 명령을 실행해야 할 지 기록(현재 실행중인 명령어의 주소를 저장)
- Native Method Stack
- Java이외의 언어에 제공되는 Method의 정보가 저장
- JVM Stacks
- 호출된 메서드의 파라미터, 지역 변수, 리턴값 등이 저장되는 영역 ( 함수의 호출과 반환을 담당)
- 프로그램 실행 시 임시로 할당되었다가 메서드를 빠져나가면 소멸
자바프로그램 실행 과정
- 프로그램이 실행되면 JVM은 OS로부터 필요한 메모리를 할당 받음
- JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리
- 자바 컴파일러(javac)가 소스코드를 읽어 자바 바이트코드(.class)로 변환 = 컴파일링
- Class Loader를 통해 class파일들을 JVM에 로딩
- 로딩된 파일들은 Execution engine을 통해 해석
- 해석된 코드는 Runtime Data Areas에 배치되고 수행

'공부 기록 > 개념정리' 카테고리의 다른 글
박싱 vs 언박싱 , 타입 캐스팅 (0) | 2024.04.07 |
---|---|
인코딩 vs 디코딩 , 직렬화(serialization) (0) | 2024.04.07 |
런타임 vs 컴파일 타임 / 컴파일러 vs 인터프리터 (0) | 2024.03.28 |
OOP (객체지향프로그래밍) (0) | 2024.03.28 |
[네트워크] HTTP (0) | 2024.03.17 |