Java - Stack, Heap

박제영·2024년 10월 24일
0

Stack (스택)

정적으로 할당된 메모리 영역
메소드 호출과 관련된 데이터와 Primitive타입의 데이터를 저장하는 메모리 영역
(boolean, char, short, int, long, float, double)
메소드가 호출될 때마다 해당 메소드의 스택 프레임이 생성되며, 메소드가 종료되면 이 스택 프레임은 사라짐

스택에 저장되는 정보는 :

  • 메소드 호출 정보 : 메소드가 실행되는 동안 필요한 지역 변수, 매개 변수, 리턴 값 등
  • 제어 흐름 : 메소드 실행이 끝났을 때 돌아갈 위치를 저장

Last In First Out (LIFO) 구조로, 마지막에 호출된 메소드가 먼저 종료됨. 이 메모리 영역은 고정된 크기를 가지고 있으며, 너무 많은 메소드 호출로 인해 스택 크기를 초과하면 StackOverFlowError가 발생함

Heap (힙)

동적으로 생성된 객체들이 저장되는 메모리 영역

  • 동적 메모리 할당 : 프로그램 실행 중 객체가 생성될 때 힙에 할당
  • Garbage Collection : 힙에 할당된 객체들 중 더 이상 사용되지 않는 객체들은 JVM의 GC에 의해 자동으로 제거됨

힙 영역은 크게 두 영역으로 나눔 :

  • Young Generation : 새롭게 생성된 객체들이 저장되는 영역. 여기서 살아남은 객체들은 Old Generation으로 이동함
  • Old Generation : 오랫동안 참조되고 살아남은 객체들이 저장되는 영역. Old Generation에서더 이상 참조되지 않는 객체는 GC에 의해 제거됨

Heap은 스택과 달리 크기가 동적으로 조정될 수 있지만, 지나치게 많은 객체가 생성되거나 관리되지 않으면 OutOfMemoryError가 발생할 수 있음

profile
안녕하세요.

0개의 댓글