Java의 메모리 영역

Dohyeon Kong·2024년 4월 3일
0

Java☕

목록 보기
2/12
post-thumbnail

Java의 메모리 영역

  • 메소드 영역(Method Area)
  • 힙 영역(Heep Area)
  • 스택 영역(Stack Area)
  • PC 레지스터(PC Register)

메소드 영역(Method Area)

클래스의 정보(클래스 명, 부모 클래스 명, 메소드, 변수 정보 등)가 저장되는 영역

  • static 변수와 같은 클래스 변수가 저장된다.

힙 영역(Heap Area)

객체와 배열이 저장되는 영역

  • 모든 쓰레드가 공유하여 사용이 된다.
  • Garbage Collector(GC)에 의해 영역이 관리가 되고, 더이상 참조되지 않는 객체들이 이곳에서 제거된다.

스택 영역(Stack Area)

지역 변수(Local Variables), 메소드 호출 시의 매개변수 등이 저장되는 영역

  • 각 쓰레드마다 별도의 스택 영역을 가지고 있다.
  • 메소드 호출 시 새로운 블록(Stack Frame)이 생성이 되고, 메소드 종료 시 해당 블록이 제거된다.

PC 레지스터(PC Registers)

쓰레드가 실행되는 동안 현재 실행중인 JVM 명령의 주소를 저장하는 영역

  • 각 쓰레드는 자신만의 PC 레지스터를 가지고 있다.

변수가 선언되고 호출될 때 메모리 동작은 어떻게 될까?🤔

변수 선언

  • 클래스 변수(static 변수)
    메소드 영역에 할당되며, 클래스가 메모리에 로드될 때 생성되고 프로그램이 종료될 때까지 유지된다.
  • 인스턴스 변수
    힙 영역에 할당되며, 객체가 생성될 때마다 각 인스턴스에 대해 새로운 메모리 공간이 할당된다.
  • 지역 변수
    스택 영역에 할당되며 메소드가 호출될 때 생성되고 메소드가 종료될 때 제거된다.

함수(메소드 호출)

  • 메소드가 호출되면 스택 영역에 새로운 스택 프레임이 생성된다. 이 스택 프레임 내에 메소드에 대한 정보(지역 변수, 매개 변수)등이 저장된다.
  • 메소드가 실행이 끝나면 해당 스택 프레임은 스택 영역에서 제거되고 메소드가 반환하는 값이 있을 경우 호출한 위치로 전달한다.
  • 재귀 호출이나 다수의 메소드 호출이 일어날 때마다 이 과정이 반복되며 각 메소드 호출에 대해 별도의 스택 프레임이 추가된다.
profile
천천히, 꾸준히, 그리고 끝까지

0개의 댓글