1. Static Area (스태틱 메모리 영역 = Method Area)
흔히 스태틱(Static) 이라고 부르는 이 메모리 영역은 글자 뜻 그대로 ‘정적 메모리’라는 뜻을 가지고 있다.
이는 컴파일 시간 동안 할당 된 메모리이며 고정된 공간을 차지하고 런타임 중에 변경할 수 없는 특징을 가지고 있다.
정적 메모리를 잘 사용할 경우 (Singleton 등) 메모리 사용에 있어 이점을 볼 수 있다.
단, 잘못 사용할 경우 정적 메모리는 공유되는 자원으로써 멀티 쓰레드 환경에서 치명적인 버그를 불러올 수 있기에 주의가 필요하다.
2. Stack Area (스택 메모리 영역)
스택(Stack) 이라고 부르는 메모리 영역은 글자 뜻 처럼 위에서 아래로 쌓아가는 방식으로 작동하는 메모리이다. LIFO(Last In First Out) 방식을 취하고 있다. LIFO는 가장 처음에 들어간 것이 먼저 나간다는 뜻이다.
Stack 메모리에 데이터를 넣는 행위를 Push라 하며 데이터를 내보내는 행위를 Pop이라 한다.
기본 자료형 int, long, boolean 등 의 지역변수와 매개변수의 데이터값이 저장되며 추가적으로 객체 생성 시 참조 주소값도 저장된다.
3. Heap Area (힙 메모리 영역)
참조형 데이터 타입을 갖는 객체, 배열 등의 데이터가 저장되는 메모리 영역이다. (new 연산자를 통해 생성된 객체)
Stack 영역의 공간의 변수(객체, 객체 변수, 참조 변수)는 실제 데이터가 저장된 Heap 영역의 주소 값을 new 연산자를 통해서 반환받는다.
객체의 실제 데이터는 Heap 영역에 올라간다.
즉, Heap 은 참조형 데이터 객체의 실제 데이터들이 담기는 공간이고, Static 영역의 객체는 Heap 영역의 참조 값이 갖게 된다.
'Java' 카테고리의 다른 글
[JAVA] 자바의 특징 (0) | 2022.11.20 |
---|