-
※JVM이 사용하는 메모리 영역
OS에서 할당 받은 메모리 영역(Runtime Data Area)을 세영역으로 구분합니다.

※메소드 영역은 JVM이 시작할때 생성되고 모든 스레드가 공유하는 영역입니다.
*Static area*
○전역변수와 정정 멤버변수(static)는 Static 영역에 데이터 저장합니다.
○Static 영역의 데이터는 프로그램의 시작부터 종료가 될 때까지 메모리에 유지됩니다.
*Stack area*
○기본 자료형(byte, int, long, double, boolean)에 해당하는 지역변수의 데이터 값이 저장되는 공간입니다.
○해당 메소드가 호출될 때 메모리에 할당되고 종료되면 메모리가 해제됩니다.
○스레드별로 생성되며, 스레드가 시작될 때 할당됩니다.
○메소드를 호출할때 마다 Frame을 Stack에 추가(push)됩니다.
(frame : 스레드의 메소드가 호출될 때 수행 정보(메소드 호출 주소, 매개변수, 지역변수, 연산 스택 등)
○메소드가 종료되면 Frame 제거(pop)됩니다.
*Heap Area*
○참조형(Reference Type)의 데이터 타입을 갖는 객체(인스턴스), 배열등은 Heap 영역의 공간에 실제 데이터가 저장됩니다. 모든스레드가 공유합니다.
○참조형 변수(객체, 객체변수, 참조변수)는 Stack 영역의 공간에서 실제 데이터가 저장된 Heap영역의 참조 값을 New연산자를 통해 리턴을 받습니다.
○사용되지 않는 객체는 Garbage Collector 가 자동 제거 합니다.