(Java) 자바의 정석 3판 008일차 - JVM의 메모리 구조

JVM의 메모리 구조

이 글을 보기 전에 아래 글을 참조하면 더 이해가 잘 간다.
(C/C++) 참고용 정리 - 메모리 영역(Code, Data, Stack, Heap)

  • Method Area
    클래스 데이터가 들어간다.
    즉 클래스 변수(static 변수)가 들어간다.
    프로그램 실행되자마자 적재되고 끝날 때까지 사라지지 않는 놈이다.
    기본적인 메모리 영역의 Data 영역에 해당한다.
  • Call Stack
    메소드가 호출되면 해당 메소드를 콜스택에 push한다.
    제어권이 이전에 실행 중이던 메소드에서 Stack의 top에 위치한 메소드로 이동하게 된다.
    이전에 실행 중이던 메소드는 대기 상태가 되고 호출한 메소드의 작업이 끝날 때까지 대기하게 된다.
    그러면서 해당 메소드 만의 스코프를 생성한다.
    별도의 스코프를 생성하므로 지역 변수가 이곳에 존재한다.
    해당 메소드 아래 있는 메소드가 해당 메소드를 호출한 메소드가 된다.
    JVM은 프로그램이 실행되면 일단 main 메소드를 찾아 콜 스택에 push하게 된다.
    그리고 메소드의 작업에 필요한 메모리 공간을 콜스택이 제공해주고,
    작업을 마치게 되면 할당 되었던 메모리 공간은 반한된다.
    기본적인 메모리 영역의 Stack에 해당한다.
  • Heap
    클래스의 인스턴스가 생성되는 공간.
    인스턴스 변수들이 들어간다.
    new 연산자를 쓰므로 동적 할당이라고 할 수 있다.
    메모리 상에서 해제는 가비지 컬렉터가 자동으로 수행한다.
    기본적인 메모리 영역의 Heap에 해당한다.