JVM의 목적은 자바 프로그램이 어느 기기나 운영체제 상에서도 실행될 수 있도록 하는 것이다.
프로그램 메모리를 관리하고 최적화한다.
우리가 Ctrl+S 로 자바소스파일을 저장하면 javac.exe 자바컴파일러는 자바소스파일(.java)을 바이트코드파일(.class)로 변환한다. (컴퓨터는 아직 읽지 못하는 상태)
이렇게 변경된 (.class)파일들은 클래스 로더를 통해 JVM메모리 영역으로 로딩된다(배치시킴).
JVM메모리영역에는 Runtime Data Areas가 있는데 총 5가지 영역으로 나뉜다. 언급할 것은 이중 3가지다.
- Method Area(=Class Area) : JVM이 시작될 때 생성된다. 클래스의 이름, 메서드코드 및 메서드 바이트 코드, 정적 변수등 클래스 정보가 저장된다.
- Heap : new 연산자로 생성된 객체가 저장된다. 배열의 정보등이 저장된다.
- Stack : 메서드 내부의 지역변수, return값, 매개변수등 stack프레임에 임시저장이 되며 메서드 실행후 소멸된다.
JVM에 적재된 (.class)파일이 Execution engine을 통해 기계어로 변경(해석)된다.
해석된 바이트 코드는 메모리 영역에 배치되어 실질적인 수행이 이루어진다.