개발 언어/자바(Java)

자바 메모리 영역(Static, Stack, Heap)

라이언 IT 2023. 2. 19. 22:01

아래 내용에서 틀린 부분이 있다면 댓글 부탁드립니다.


1. Static 영역
 1) 전역 변수(Global), 정적 멤버 변수(static 선언) 대상
 2) 발생시점
  - JVM(JAVA Virtual Machine) 이 동작해서 클래스가 로딩 될 때 생성
  - 프로그램이 종료될 때까지 메모리에 남아있음

2. Stack 영역
 1) 블록 내에서 선언된 지역 변수(Local) 대상
 2) 기본 자료형을 생성할 때 저장하는 공간 / 임시적으로 사용하는 변수 및 정보를 저장하는 영역
 2) heap 영역에 올라간 인스턴스의 참조값 저장
 3) 발생시점 :
  - 메서드 호출할 떄마다 개별적으로 스택이 생성 / 종료 시 영역 해제 
  - Compile 시 할당

3. Heap 영역
 1) 참조형(Reference Type)의 데이터 타입을 갖는 객체, 배열(Array)이 Heap 영역에 저장
 2) 인스턴스의 실제 데이터가 heap 영역에 올라감. 저장된 메모리 위치가 다르기 때문에 static 메서드에서 외부 인스턴스 멤버에 접근 할 수 없음
 3) 정리
  - new 인스턴스 객체 생성 -> Heap 영역에 생성된 객체가 올라감 -> Stack 영역에 참조값이 저장
  - 어떤 참조 변수도 Heap 영역에 있는 인스턴스를 참조하지 않는다면, GC(Garbage Collector) 실행 및 메모리에서 삭제