[Java] 메모리 사용 영역(Runtime Data Area)

HodooHa·2024년 4월 21일
post-thumbnail

메모리 사용 영역

JVM(Java Virtual Machine은 운영체제에서 할당받은 메모리 영역(Runtime Data Area)를 다음과 같이 세부 영역으로 구분해서 사용한다.

메소드 영역(Method Area)

JVM이 시작할 때 생성되고, 모든 스레드가 공유하는 영역이다.
클래스별로 정적 필드(static field)와 상수(contstant), 메소드 코드, 생성자 코드 등을 분류해서 저장한다.

힙 영역(Heap Area)

객체와 배열이 생성되는 영역이다.
여기에 생성된 객체와 배열은 JVM 스택 영역의 변수나 다른 객체의 필드에서 참조한다.

※ 만약 참조하는 변수나 필드가 없다면 의미없는 객체가 되기 때문에 JVM이 이를 쓰레기로 취급하고 쓰레기 수집기(Garvage Collector)를 실행시켜 자동으로 제거한다.

JVM 스택 영역

메소드를 호출할 때마다 프레임을 추가하고 메소드가 종료되면 해당 프레임을 제거하는 동작을 수행한다.

프레임 내부의 로컬 변수 스택에 기본 타입 변수와 참조 타입 변수가 실행 순서에 따라서 아래와 같이 추가되거나 제거된다.

char v1 = 'A';  --if(v1 == 'A') {             --int v2 = 100;
    double v3 = 3.14;
}

boolean v4 = true;  --

※ 참조 타입 변수는 스택 영역에 힙 영역의 객체 주소를 가진다.

int[] scores = {10, 20, 30};

배열 변수인 scores는 스택 영역에 생성되지만 실제 배열의 값은 힙 영역에 생성된다. 변수에는 배열의 힙 영역의 주소가 저장된다.

※ 자바에서 배열은 객체로 취급한다.

출처: https://velog.io/@soheeoott/Java-메모리사용영역, 혼공자 책

본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.

profile
성장하는 개발자, 하지은입니다.

0개의 댓글