Changsoon's Note Backend Developer

자바 메모리 구조와 변수 공유

자바 메모리 구조에 대해서 정리해보자.

자바 메모리 구조는 크게 메서드 영역, 스택 영역, 힙 영역으로 나뉜다.

메서드 영역

메서드 영역은 공통 데이터를 가진다.

클래스 정보, 프로그램을 실행하는데 필요한 공통 데이터, static, 런타임 상수풀을 가진다.

스택 영역

스택 영역은 실제 프로그램이 실행되는 영역이다.

메서드 실행 시 스택영역에 하나의 스택 프레임이 쌓인다.

스택 프레임에는 지역 변수, 중간 연산 결과, 메서드 호출 정보 등이 포함된다.

각 스레드 별로 스택 영역은 새로 생성된다.

alt text

힙 영역

힙 영역은 객체 인스턴스와 배열이 생성되는 영역이다.

GC가 이루어지는 주요 영역이다.

지역 변수와 인스턴스/정적 필드

스레드가 생기면 새로운 스택 영역에 스택 프레임이 쌓인다.

스레드가 생성될 때마다 스택 영역이 새로 생기므로, 스택 프레임에 포함되어 있는 지역 변수는 계속 새로 생긴다.

인스턴스 필드와 정적 필드는 새로운 스택 영역이 생기더라도 각각 힙 영역과 메서드 영역에 생성되므로 새로 생기지 않고 공유된다.