본문 바로가기

자바

[자바] 힙(heap)과 스택(stack) 메모리 구조

자바 메모리 구조

Stack

  • 정적으로 할당된 메모리 영역이다.
  • 원시 타입(primitive)의 데이터가 함께 할당된다.
  • Heap 영역에 생성된 Object 타입의 데이터의 참조값이 할당된다.
  • 각각의 Thread는 각각의 Stack 메모리를 갖는다

Heap

  • 동적으로 할당된 메모리 영역이다.
  • 모든 Objcet 타입의 데이터가 할당 된다.
  • Heap 영역의 Object를 가리키는 참조변수가 Stack에 저장된다.
  • 생명주기가 긴 데이터들이 주로 저장된다.
  • 몇개의 Thread가 존재하든 상관없이 하나의 Heap영역만 존재한다.
public class Main {
    public static void main(String[] args) {
        int age = 29;
        String name = "sebang";
    }
}

Stack에 29라는 값이 age라는 변수명으로 할당된다.

String은 Object를 상속받았으므로 String은 Heap영역에 할당되고, Stack에 name이라고 생성된 변수는 Heap영역의 "sebang"이라는 스트링을 참조하게 된다.