JVM이란?
JVM(Java Virtual Machine)은 자바 가상 머신으로 자바와 운영체제 사이에서 중계자 역할을 하며 자바가 운영체제 종류에 영향받지 않고 독립적으로 자바 프로그램을 실행시켜줌.
JAVA 프로그램의 실행 단계
- 자바 컴파일러에 의해 자바 소스 파일은 바이트 코드로 변환
- 바이트 코드를 JVM에서 읽어들임
- 어떤 운영체제든간에 프로그램을 실행할 수 있도록 해줌
JVM의 메모리 영역
1. Method(Static)
- JVM에서 읽어들인 클래스와 인터페이스에 대한 런타임 상수 풀, 메서드와 필드, Static 변수, 메서드 바이트 코드 등을 보관
2. Runtime Constant Pool
- Method Area 영역에 포함되지만 독자적 중요성을 띔
- 클래스 파일 constant_pool 테이블에 해당하는 영역
- 클래스와 인터페이스 상수, 메서드와 필드에 대한 모든 래퍼런스 저장
- JVM은 런타임 상수 풀을 통해 해당 메서드나 필드의 실제 메모리 상 주소를 찾아 참조
3. Heap Area
- 프로그램 상에서 데이터를 저장하기 위해 런타임 시 동적으로 할당하여 사용하는 메모리 영역
- new 연산자를 통해 생성한 객체 또는 인스턴스와 배열을 저장
- JVM이 관리
4. Stack Area
- 선입후출(FILO) 구조
- 메서드 호출 시 생성되는 스레드 수행정보를 기록하는 Frame 저장
- 메서드 정보, 지역변수, 매개변수, 연산 중 발생하는 임시데이터 저장
5. PC 레지스터
- CPU 명령어를 수행하며 필요한 정보를 레지스터에 저장
- 연산 및 결과값을 메모리에 전달하기 전 CPU 내 기억장치
6. Native Method Stack Area
- 자바 외 언어로 작성된 네이티브 코드를 위한 메모리
- C/C++ 등의 코드를 수행하기 위한 스택
- native 메서드의 매개변수, 지역변수 등을 바이트코드로 저장