Method 영역은 정적 메모리 영역으로 모든 스레드에서 공유되는 메모리 공간입니다. 클래스 로더가 클래스를 로드할 때 클래스와 관련된 메타데이터를 저장합니다.
클래스, 인터페이 정보, 메서드, 생성자, 정적 변수, 상수, 메서드 등이 포함됩니다.
Heap 영역은 동적 메모리 영역으로, 객체와 배열이 저장되는 공간입니다.
런타임 시에 동적으로 생성된 객체와 배열은 모두 힙에 저장되고, 모든 스레드에서 공유됩니다.
java에는 가비지 컬렉터를 제공하는데, JVM이 사용되지 않는 객체를 자동으로 회수하여 메모리 누수를 방지합니다.
Stack 영역은 각 스레드마다 독립적인 메모리 영역으로, 메서드 호출 시 생성되는 지역 변수, 매개 변수, 메서드의 호출 정보 등이 저장됩니다.
메서드 호출 시 스택 프레임이 생성되고, 메서드가 종료되면 스택 프레임이 제거됩니다. 스택 같은 경우는 후입선출 방식으로 관리되는데 가장 나중에 추가된 데이터가 가장 먼저 제거되는 구조입니다.