JVM의 메모리구조

수아레스·2022년 11월 21일

메소드 영역(Method Area)

클래스 정보와 클래스 변수가 저장되는 곳

전역변수와 static변수를 저장하며, Method영역은 프로그램의 시작부터 종료까지 메모리에 남아있다.

호출 스택(Call Stack)

메소드의 작업공간. 메소드가 호출되면 호출 스택에 메모리 할당, 종료되면 사용하던 메모리를 반환함

지역변수와 매개변수 데이터 값이 저장되는 공간이며, 메소드가 호출될 때 메모리에 할당되고 종료되면 메모리가 해제된다. LIFO(Last In First Out) 구조를 갖고 변수에 새로운 데이터가 할당되면 이전 데이터는 지워진다.

  • 메소드가 호출되면 수행에 필요한 메모리를 스택에 할당받는다.
  • 메소드가 수행을 마치면 사용했던 메모리를 반환
  • 호출 스택의 제일 위에 있는 메소드가 현재 실행중인 메소드, 나머지는 대기중인 상태
  • 아래에 있는 메소드가 바로 위의 메소드를 호출한 메소드이다.

힙(Heap)

인스턴스가 생성되는 공간.

new 키워드로 생성되는 객체(인스턴스), 배열 등이 Heap 영역에 저장되며, 가비지 컬렉션에 의해 메모리가 관리되어진다.


각 메모리 영역이 할당되는 시점

  • Method 영역 : JVM이 동작해서 클래스가 로딩될 때 생성
  • Stack 영역 : 런타임시 할당
  • Heap 영역 : 컴파일 타임 시 할당

※ 컴파일 타임 : 소스코드가 기계어로 변환되어 실행가능한 프로그램이 되는 과정
※ 런타임 : 컴파일 타임 이후 프로그램이 실행되는 때

profile
띵호와

2개의 댓글

comment-user-thumbnail
2022년 11월 22일

헉....... 열정스기루시네요 멋져..

1개의 답글