지역 변수, 매개 변수 등의 값들이 저장되는 영역입니다. 프로그램 실행 중에 메소드를 호출할 때마다 각 메소드는 스택에 메모리를 할당받고, 메소드 실행이 종료되면 할당받은 메모리를 반환합니다. 스택은 LIFO 방식으로 동작합니다.
다시 말해, 스택은 메소드가 호출될 때 프레임이라는 메모리 영역을 확보하게 됩니다.
각 프레임은 독립적인 공간으로, 메소드를 호출하는 순서대로 쌓이게 됩니다. 스택에 저장되는 정보는 다음과 같습니다.
스택은 일련의 실행 프레임을 저장하며, 메소드가 호출될 때마다 프레임이 스택에 추가되고, 메소드가 반환되면 프레임은 스택에서 제거됩니다. 이 구조적 특성 때문에 후입선출 방식으로 동작합니다. 각 스레드는 독립적인 스택을 가지며, 다른 스레드와 공유되지 않습니다
동적으로 할당된 객체가 저장되는 공간입니다. 'new' 키워드를 사용하여 생성된 객체는 모두 힙 영역에서 관리됩니다. 가비지 컬렉터는 힙 영역에서 사용되지 않는 객체들을 찾아 메모리를 해제합니다.
다시 말해, 힙 영역은 객체와 객체들의 배열 등 참조 타입 데이터를 저장합니다.
객체가 생성되고 메모리가 할당되면, 해당 객체 참조를 반환합니다.
클래스 정보, 전역 변수 및 정적(static) 변수, 메소드 코드와 같은 프로그램 데이터와 메타데이터가 저장되는 영역입니다. 메소드 영역은 모든 스레드에 의해 공유되며 시스템이 종료되기 전까지 유지됩니다.
다시 말해,메소드 영역은 클래스 로더에 의해 클래스 파일이 로드되면 해당 클래스의 정보 및 메타데이터를 저장하는 영역입니다.
메소드 영역에 저장된 데이터는 모든 스레드에서 공유되며, 자바가상머신(JVM)이 실행되고 있는 동안 지속되게 됩니다. 가비지 컬렉션은 이 영역에 영향을 미칠 수도 있지만, 대부분 힙 영역에서 주로 작동하는 것이 일반적입니다. 이번 설명이 더 풍부한 내용을 담고 있기를 바랍니다. 이 각 영역에 대한 이해를 통해 자바에서 메모리의 동작 방식을 보다 명확하게 파악할 수 있게 됩니다.
메소드 영역 - 클래스,클래스변수
힙 영역 - 객체인스턴스
스택 영역 - 메소드, 지역변수, 매개변수
───────────────
│ Java Memory │
├──────────────┤
│ Method Area │
│──────────────│
│ Heap │
│──────────────│
│ Stack │
───────────────