-
(김영한의 자바 기본) 5 - 자바 메모리 구조 (메서드, stack, heap)개발/Java 2024. 10. 23. 16:10
■ 자바 메모리 구조 (메서드, 스택, 힙)
1. 메서드 영역 : 클래스 정보 보관
2. 스택 영역 : 실제 프로그램 실행되는 영역으로, 메서드 실행할 때마다 하나씩 쌓임
3. 힙 영역 : 객체(인스턴스) 생성 영역. new 명령어 사용 시 해당 영역 사용
1. 메서드 영역
: 실행에 필요한 공통 데이터 관리. 프로그램의 모든 영역에서 공유한다.
- 클래스 정보 : 클래스 실행 코드(바이트 코드), 필드, 메서드와 생성자 코드 등 모든 실행 코드 존재
- static : static 변수 보관
- 런타임 상수 풀 : 공통 리터럴 상수 보관
※ 문자열 풀은 자바 7 부터 힙 영역으로 이동함.
2. 스택 영역(함수의 호출)
: 자바 실행 시, 하나의 실행 스택 생성된다.
각 스택 프레임은 지역 변수, 중간 연산 결과, 메서드 호출 정보 등을 포함한다.
스택 영역에 쌓이는 네모 모양이 스택 프레임을 나타내며,
메서드 호출하면 쌓이고 메서드 종료 시 사라진다.
3. 힙 영역(사용자의 동적 할당)
: 객체(인스턴스)와 배열이 생성되는 영역.
가비지 컬렉션(GC) 이루어지는 중요 영역이며, 더 이상 참조되지 않는 객체는 GC에 의해 제거된다.
※ 스택은 쓰레드별로 하나의 실행 스택이 생성된다. 즉, 쓰레드 수만큼스택 영역이 생성되는 것이다.
※ 메서드 코드는 메서드 영역(공통) 들어간다.
인스턴스 생성 시 내부 변수값은 다를 수 있지만 메서드는 공통 코드를 공유한다.
객체 생성 시 인스턴스 변수(필드)는 메모리가 할당되지만,
메서드에 대한 새로운 메모리 할당은 없다. (메서드는 메서드 영역에서 공통으로 관리되고 실행)
■ 정리
- 자바는 스택 영역을 사용해서 메서드 호출과 지역 변수(매개변수 포함) 관리한다.
- 메서드를 계속 호출하면 스택 프레임이 계속 쌓인다.
- 지역 변수(매개변수 포함)는 스택 영영에서 관리한다.
- 스택 프레임 종료 시 지역 변수도 제거된다.
- 스택 프레임 모두 제거 시 프로그램 종료된다.
'개발 > Java' 카테고리의 다른 글
(김영한의 자바 기본) 6 - static (1) 2024.10.23 (김영한의 자바 기본) 4 - 접근 제어자 (private, default, protected, public) (0) 2024.10.23 (김영한의 자바 입문) 3 - 내용 정리 (0) 2024.05.28 (Do it 자바) 2 - 변수와 자료형 (1) (0) 2023.05.31 (Do it 자바) 1 - 자바 프로그래밍 시작하기 (2) 2023.05.25