
지역변수는 stack. 인스턴스 변수는 Heap에 저장.
간단히 말하자면 메서드 영역에는 정적 필드와 클래스 구조만을 갖고 있다고 할수있다.
자료구조 Stack은 마지막에 들어온 값이 먼저 나가는 LIFO 구조로 push와 pop 기능 사용방식으로 동작한다.
메서드 호출 시마다 각각의 스택 프레임(그 메서드만을 위한 공간)이 생성되고 메서드 안에서 사용되는 값들을 저장하고, 호출된 메서드의 매개변수, 지역변수, 리턴 값 및 연산 시 일어나는 값들을 임시로 저장한다.
그리고 메서드 수행이 끝나면 프레임별로 삭제된다.
스택 프레임(stack frame): 메소드가 호출될 때마다 프레임이 만들어지며, 현재 실행중인 메소드 상태 정보를 저장하는 곳이다. 메서드 호출 범위가 종료되면 스택에서 제거된다. 스택 프레임에 쌓이는 데이터는 메서드의 매개변수, 지역변수, 리턴값, 연산시 결과값 등이 있다.
단, 데이터의 타입에 따라 스택(stack) 과 힙(haeap)에 저장되는 방식이 다르다는 점은 유의해야 한다.
기본(원시)타입 변수는 스택 영역에 직접 값을 가진다.
참조타입 변수는 힙 영역이나 메소드 영역의 객체 주소를 가진다.
예를들어 Person p = new Person(); 와 같이 클래스를 생성할 경우, new 에 의해 생성된 클래스는 Heap Area 에 저장되고, Stack Area 에는 생성된 클래스의 참조인 p 만 저장된다.