JVM의 Stack과 Heap

Pasted image 20250122111223.png

스택(Stack)영역

  • int, long, booolean 등 기본 자료형을 생성할 때 저장하는 공간
  • 임시적으로 사용되는 변수나 정보들이 저장되는 영역

메서드 호출 시 마다 스텍 프레임(그 메서드만을 위한 공간이 생성되고, 그 메서드 안에서 사용되는 값들을 저장하고, 호출된 메서드의 매개변수, 지역변수, 리턴 값 등을 임시로 저장한다.

그리고 메서드의 수행이 끝나면 프레임별로 삭제된다.

단, 데이터 타입에 따라 스텍과 힙에 저장되는 방식이 다르다는 점을 유의해야한다.

1. 기본(원시)타입 변수는 스텍영역에 직접 값으로 저장된다.

2. 참조타입(new연산자) 등은 힙영역이나 메소드 영역의 객체 주소를 가진다.

위사진 참고

스텍 영역은 각 스레드 마다 하나씩 존재한다.

스레드가 시작될 때 할당되며, 고정된 사이즈를 갖는다.

- 이를 넘어서면 StackOverFlowError를 발생한다.

힙(Heap)영역

  • 메서드 영역과 함께 모든 스레드가 공유한다.
  • JVM이 관리하는 프로그램 상에서 데이터를 저장하기 위해 런타임 시 동적으로 할당되어 사용되는 영역이다.
  • new연산자로 생성되는 클래스와 인스턴스 변수, 배열 타입 등 Reference Type이 저장된다.
  • 메서드 영역에 저장된 클래스만이 힙영역에 생성이 되어 적재된다. 힙영역에 더이상 아무도 참조하지않는 객체가 있다면, GC에 의해 제거된다.