메모리 구조
✒️ 2025-06-13 11:46 내용 수정
참고 자료 : Inpa dev's Java JVM 내부 구조 메모리 영역 심화편, Medium Jalitha Dewpura Understanding Java Virtual Machine(JVM) Artchitecture
- C언어의 메모리 구조와도 비슷하다.
- 모든 자바 프로그램은 JVM을 통해 실행되고, JVM은 메모리 영역을 관리한다.
- JVM 참고.

- 사진 출처 : TCPSchool Java array memory

1. 메서드 영역(Method area)
클래스 정보, 클래스 변수(static variable), 상수, 메서드 등이 저장되는 영역
- Class Area, Static Area로도 불린다.
- 가장 낮은 메모리 주소 영역이다.
- 클래스 로더에 의해 클래스 정보가 로드되고 저장된다.
- 클래스 로딩 순서 참고.
- 클래스와 클래스 레벨 변수는 클래스(Classes), 기타 제어자, 클래스 변수 참고.
- 이 영역은 JVM 시작 시 생성되고, 프로그램 실행 동안에 클래스 정보는 변하지 않는다.
- 모든 스레드에서 공유한다.
- static은 클래스를 해석할 때 메모리에 등재된다.
- 프로그램이 종료될 때 해제된다.
- 프로그램이 진행 중일 때는 메모리에 고정된다.
- static이 많다면 메모리가 부족해질 수 있다.
2. 힙 영역(Heap area)
동적으로 할당되는 객체와 인스턴스 변수들이 저장되는 영역
- 메모리 주소 영역의 중간 정도에 해당한다.
- JVM은 Java 프로그램에서
new키워드를 사용해서 인스턴스가 생성되면, 해당 인스턴스의 내용을 힙 영역안에 저장한다.- 인스턴스 변수 참고.
- 메서드 영역(Method Area)와 마찬가지로 모든 스레드가 공유한다.
- 참조형 데이터 타입을 갖는 객체(인스턴스를 초기화해준 값)가 저장된다.
- Class, Interface, String, Array, Wrapper 등이 저장된다.
- Heap 영역의 객체 데이터를 참조하는 참조 변수(인스턴스, 주소값 저장)는 Stack 영역에 저장된다.
- 아래 예시에서
person은 Stack 영역에 저장되고,person이 가리키는new Person()객체는 Heap에 저장된다.
Person person = new Person();
- 클래스로부터 생성된 객체는 힙에 할당되고, 프로그램 실행 중에 객체 정보는 바뀔 수 있다.
- 힙 영역은 메모리의 주소가 낮은 주소에서 높은 주소의 방향으로 할당된다.
- 가비지 컬렉션(Garbage Collection) 대상이 되는 공간으로, 참조하는 대상이 더 이상 사용하지 않는 경우 제거된다.
3. 스택 영역(Stack area)
메서드가 호출될 때 메서드의 스택 프레임을 저장하는 영역
- 스택 프레임 : 메서드의 호출 정보다.
- 가장 높은 메모리 주소 영역이다.
- 기본 자료형(원시 자료형)이 저장되는 영역이다.
- 기본 자료형 참고.
- 각 스레드별로 생성된다.
- JVM은 Java 프로그램에서 메서드가 호출되면, 메서드의 호출과 관계되는 지역 변수와 매개 변수를 스택 영역에 저장한다.
- 메서드(Methods) 참고.
- 지역변수, 매개변수가 이 영역에 저장된다.
- 스택 영역은 메서드의 호출과 함께 할당(스택 프레임 생성)되고, 호출이 완료되면 사라진다.(스택 프레임 제거)
- 스택 영역은 푸시(push) 동작으로 데이터를 저장하고, 팝(pop) 동작으로 데이터를 인출한다.
- 후입선출(LFIO, Last-In-First-Out) 방식으로 작동되므로, 가장 늦게 저장된 데이터가 가장 먼저 인출된다.
- 스택 영역은 메모리의 주소가 높은 주소에서 낮은 주소의 방향으로 할당된다.