[java] 힙과 스택(Stack)의 차이점
자바 프로그램을 작성하다 보면 “힙”과 “스택”이라는 용어를 자주 듣게 됩니다. 이 둘은 메모리 관리와 관련된 개념으로, 프로그램이 실행되는 동안 사용됩니다. 이 블로그 포스팅에서는 힙과 스택의 차이점에 대해 설명하겠습니다.
목차
스택(Stack)
스택은 후입선출(LIFO, Last In First Out) 방식으로 동작하는 메모리 영역입니다. 메소드 호출 시 지역 변수, 매개변수, 메소드 반환 주소 등이 스택에 저장됩니다. 스택은 구조적으로 간단하며, 데이터 저장과 검색 속도가 빠릅니다.
public class StackExample {
public void foo() {
int x = 10;
bar(x);
}
public void bar(int y) {
// 메소드 로직
}
}
힙(Heap)
힙은 동적으로 할당된 객체가 저장되는 영역으로, 객체의 생성 및 소멸은 사용자에 의해 관리됩니다. 힙은 데이터를 저장하는데 사용되며, 힙 영역에 저장된 객체는 전역적으로 접근 가능합니다.
public class HeapExample {
public static void main(String[] args) {
// 객체 생성
StringBuilder sb = new StringBuilder("Hello");
// 객체 소멸
sb = null;
}
}
힙과 스택의 차이
- 저장하는 데이터: 스택은 정적으로 할당된 변수와 메소드 호출 시의 정보를 저장하고, 힙은 동적으로 할당된 객체들을 저장합니다.
- 생성 및 소멸: 스택은 컴파일 시간에 메모리 공간이 할당되고 소멸되지만, 힙은 사용자에 의해 동적으로 할당돼 소멸됩니다.
- 속도: 스택은 데이터 검색과 저장이 빠르지만, 힙은 동적으로 할당되는 만큼 속도가 상대적으로 느립니다.
이렇게 힙과 스택은 프로그램의 메모리 관리에 있어 중요한 역할을 합니다. 이해하고 적절히 활용하는 것은 자바 개발자로서 중요합니다.
참조
- https://docs.oracle.com/javase/tutorial/java/nutsandbolts/stackandheap.html