// Astro script block intentionally left blank
잠시만 기다려주세요...
loading icon

JAVA/ Static, Stack, Heap 메모리 영역의 이해

java Static, Stack, Heap 메모리 영역

작성일
2021년 3월 13일
단어 수
292 단어
읽는 시간
1 분
카테고리
개발


JAVA 메모리 영역의 이해

JAVA 에서 사용되는 대표적인 메모리는 Static, Stack, Heap 이 있다. 이 세가지의 주요한 특징과 사용되는 방식에 대해서 알아봅시다.

Static

흔히 스태틱(Static) 이라고 부르는 이 메모리 영역은 글자 뜻 그대로 ‘정적 메모리’라는 뜻을 가지고 있습니다. 이는 컴파일 시간 동안 할당 된 메모리이며 고정된 공간을 차지하고 런타임 중에 변경할 수 없는 특징을 가지고 있습니다. 정적 메모리를 잘 사용할 경우 (Singleton 등) 메모리 사용에 있어 이점을 볼 수 있습니다. 단, 잘못 사용할 경우 정적 메모리는 공유되는 자원으로써 멀티 쓰레드 환경에서 치명적인 버그를 불러올 수 있기에 주의가 필요합니다.

사용 예

public class Card{
	static int number;
	static long code;
}

Stack

스택(Stack) 이라고 부르는 메모리 영역은 글자 뜻 처럼 위에서 아래로 쌓아가는 방식으로 작동하는 메모리입니다. LIFO(Last In First Out) 방식을 취하고 있습니다. LIFO 는 가장 처음에 들어간 것이 먼저 나간다는 뜻입니다. Stack 메모리에 데이터를 넣는 행위를 Push 라 하며 데이터를 내보내는 행위를 Pop 이라 합니다. 기본 자료형 int, long, boolean 등 의 지역변수와 매개변수의 데이터값이 저장되며 추가적으로 객체 생성 시 참조 주소값도 저장됩니다.

사용 예

public class Card{
	public void getZero(){
		int num = 0;
		return num;
	}
}

Heap

힙(Heap) 이라고 부르는 메모리 영역은 글자 뜻은 쌓아올린 더미 라는 뜻인데, 이 자체만으론 무슨 일을 할지 잘 예상이 가지않습니다. 힙은 참조형의 데이터 객체(Object)의 실제 데이터들이 담기는 공간입니다. 가령 Java 에서 아래와 같은 코드를 작성한다하면,

Instance instance = new Instance();

new Instance(); 로 인해 만들어진 객체의 데이터는 힙에 존재하게 됩니다. 그럼 이 데이터를 어떻게 찾아서 쓸 수 있을까요? 그 방법은 바로 객체 데이터를 참조하고 있는 주소 사용하여 찾는 것입니다. 이 참조 주소는 객체를 만들 때 Stack 메모리에 생성이 됩니다.

사용 예

public class Card{}
public class Main{
	public static void main(String[] args){
		Card card = new Card();
	}
}
CC
BY
NC
ND

Creative Commons 저작자표시-비영리-변경금지 4.0

"JAVA/ Static, Stack, Heap 메모리 영역의 이해"은(는) irostub에 의해 작성되었으며, CC BY-NC-ND 4.0 라이센스에 따라 이용할 수 있습니다.

저작자 및 출처를 표시하고, 비영리 목적으로만, 변경하지 않는 조건하에 이용 가능합니다.