자바 프로그램이 실행되면, JVM은 해당 OS로부터 프로그램을 실행하기 위한 메모리를 할당받는다.
JVM은 할당된 메모리를 용도에 따라 다음과 같이 구분하여 관리한다.
프로그램에서 사용되는 클래스에 대한 정보와 클래스 변수(static variable)가 저장되는 영역이다.
JVM은 프로그램에서 특정 클래스가 사용되면 해당 클래스의 .class 파일을 읽어들어서 해당 클래스의 정보를 메소드 영역에 저장한다.
자바 프로그램에서 사용되는 모든 인스턴스 변수가 저장되는 영역이다.
JVM은 프로그램에서 new 등으로 인스턴스가 생성되면, 해당 인스턴스의 정보를 힙 영역에 저장한다.
힙 영역은 메모리의 낮은 주소에서 높은 주소 방향으로 할당된다.
지역 변수나 매개변수 등 메소드의 호출과 관계된 정보를 스택 프레임(stack frame)이라 한다.
스택 영역은 프로그램에서 메소드가 호출될 때 이러한 스택 프레임이 저장되는 영역이다.
JVM은 메소드 호출 시 스택 영역을 할당하여 스택 프레임을 스택 영역에 저장하고, 메소드 호출이 끝나면 소멸시킨다.
스택 영역은 메모리의 높은 주소에서 낮은 주소 방향으로 할당된다.