1. JVM도 시스템 콜을 이용하는가?
- JVM도 하나의 사용자 프로그램
- OS 입장에서는 응용 프로그램
- 따라서 JVM도 하나의 프로세스
=> 자바 프로그램 -> JVM -> 시스템 콜 -> OS 순서로 흐름(시스템 콜을 이용함)
2. JVM도 하나의 프로세스라면 왜 JVM의 메모리 구조만 따로 떼서 공부하는가?
- JVM이 프로세스 중 하나라고 볼 수 있지만,
- 자바 바이트코드를 실행하고 관리하는 복잡한 실행 환경이기 때문에,
- 내부에서 다시 고유한 메모리 관리 방식과 실행 구조를 가짐
따로 공부하는 이유는?
- JVM은 "실행 환경" 자체이기 때문에
- JVM은 자바 프로그램을 실행하는 가상의 OS 역할을 함
- JVM 내부에 또 하나의 프로세스 구조가 있는 것처럼 동작
- 실행 대상이 바이트 코드
- 일반 프로그램은 기계어가 실행되지만, JVM은 바이트 코드 실행
- 바이트 코드 실행을 위해 특별한 메모리 구조와 실행 엔진 필요
- GC, ClassLoader, Excution Engine 같은 고유 개념
- 일반 프로세스에서 볼 수 없는 JVM만의 기능 존재
JVM은 프로세스 위에 만들어진 미니 OS
JVM = 프로세스는 맞음!
하지만, JVM은 단순한 프로세스는 아니기 때문에 내부를 따로 공부
3. JVM의 메모리는 어디에 저장되는가?
- JVM도 OS 입장에선 하나의 프로세스
- 결국 Runtime Data Area도 프로세스 메모리 영역 내부 구조
4. JVM 메모리 영역(Runtime Data Area)는 왜 나눠져 있는가?
- 데이터를 효율적으로 관리하기 위해 공유 여부, 수명, 접근 방식 기준으로 메모리 분리
-Method Area: 클래스 정보 저장(JVM 전체 공유, 변경 없음)
Heap: 객체 저장(공유, GC 대상)
Stack:메서드 실행 흐름과 지역 변수(스레드 독립)
PC Register:현재 실행 중인 명령 추적(스레드별)
Native Method Stack:네이티브 메서드용(C, C++)