Java에는 JVM (Java Virtual Machine)이 존재하는데, 내부에 메모리를 관리해주는 가상 프로그램이다.
JVM의 메모리에는 Stack영역과 Heap영역이 존재한다.
Stack 영역
- 정적으로 할당된 메모리 영역
- primitive type의 변수들이 값과 함께 할당된다.
- reference type의 변수들의 참조 값이 할당된다.
- Thread마다 Stack영역이 존재한다.
Heap 영역
- 동적으로 할당된 메모리 영역
- Object타입을 상속받은 객체 (reference type)들이 할당된다. 그리고 그 객체의 참조 값이 Stack 영역에 할당된다.
- 전체 Thread를 통틀어 하나의 Heap 영역만이 존재한다.
- 사용이 끝난 객체는 Heap 영역에 계속 머무르는데 이를 JVM의 GC(Garbage Collector)가 메모리를 풀어준다.