1. JVM(Java Virtual Machine)
자바의 소스 코드를 컴파일 하면 바이트 코드로 변환되는데 JVM은 이러한 바이트 코드를 읽어서 실행할 수 있도록 해주는 도구 이다.
자바 프로그램 실행 과정
자바 프로그램은 JVM에 의해 실행된다.
1. 자바 프로그램이 실행되면 JVM이 운영체제로부터 메모리를 할당받는다.
2. Class Loader가 변환된 클래스 파일(바이트 코드)을 메모리에 저장한다.
3. Execution Engine은 클래스 로더에 저장된 클래스 파일을 명령어 단위로 분류해서 하나씩 실행한다.
4. 필요시에는 garbage collection을 통해 불필요하게 할당된 메모리를 해제하는 작업을 한다.
2. 자바의 메모리 구조
Runtime Data Area(Memory Area)
JVM이 프로그램을 수행하기 위해 운영체제로부터 할당받은 메모리 공간 이다.
Method Area, Heap, Stack, PC Register, Native Method Stack 영역으로 나뉜다.
- Method Area
- JVM이 실행되면서 생기는 공간으로, 클래스, 전역변수, Static 변수 정보가 저장되는 공간
- Runtime Constant Pool에 상수 정보가 저장되는 공간이다.
- 모든 스레드에서 정보가 공유된다.
- Heap
- new 연산자로 생성된 객체, Array와 같은 동적으로 생성된 데이터가 저장되는 공간
- Heap에 저장된 데이터는 Garbage Collector 가 처리하지 않는 한 소멸되지 않는다.
- Reference Type 의 데이터가 저장되는 공간
- 모든 스레드에서 정보가 공유된다.
- Stack
- 지역변수, 메소드의 매개변수와 같이 잠깐 사용되고 필요가 없어지는 데이터가 저장되는 공간
- 스레드마다 하나씩 존재한다.
- PC Register
- 스레드가 생성되면서 생기는 공간
- 스레드가 명령을 처리하고 있는 부분의 주소를 등록한다. JVM이 실행하고 있는 현재 위치를 저장하는 역할
- Native Method Stacks
- Java 가 아닌 다른 언어 (C, C++) 로 구성된 메소드를 실행할 때 사용되는 공간
참고