JAVA 메모리 구조 정리

Noahddd·2024년 10월 24일

JAVA

목록 보기
6/12

공부의 정리 및 복습을 위한 기록입니다.

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

위와 같이 변수를 선언하였을 때 클래스 변수에 해당하는 staticVal 변수는 메서드 영역에 저장 된다.
메서드 영역은 클래스영역, 또는 static 영역으로도 불리며 모두 같은 뜻을 가지고 있따.
메서드 영역에는 클래스 변수나, static 으로 선언된 것들이 메서드 영역에 저장된다.
클래스의 실행 코드, 필드, 메서드와 생성자 등 클래스 정보와 static 변수들이 저장되며, JVM이 실행되어 Class가 로딩될 때 생성되어 JVM이 모든 프로그램을 실행 하고 종료될 때 메모리에서 해제 된다.

다음 instanceVal 변수는 힙 영역에 저장된다.
힙 영역에는 인스턴스와 배열 등이 저장 되는 영역이며, GC(가비지 컬렉션)에 의해 인스턴스가 제거되는 주요 영역이다.
다음으로 정리할 스택 영역과는 다르게 힙 영역에서는 메모리 호출이 끝나더라도 바로 삭제되지 않고 유지되다가 힙 영역에 있는 인스턴스를 참조하지 않는다면 GC에 의해서 제거된다.
스택 영역이 쓰레드별 하나의 스택이 생성되는 것과 다르게 힙 영역은 오로지 하나의 힙 영역만 존재한다.

다음 localVal 변수는 스택 영역에 저장된다.
스택 영역에는 메서드 내에서 정의하는 기본 자료형에 해당되는 지역 변수의 데이터 값이 저장된다.
메서드가 호출될 때 스택 영역에 스택 프레임이 생기고 그 안에 메서드를 호출한다. 힙 영역과는
다르게 메서드가 호출 되면 메모리가 할당되며, 메서드가 종료되면 메모리에서 바로 삭제된다.
여기서 스택 프레임이란 메서드에 필요한 메모리 덩어리를 묶어서 일컫는 것이다.
스택 영역은 Stack 구조를 가지고 있다. LIFO 구조이다.


위 사진을 예제로 보면
int x, int y, cal 인스턴스의 주소값은 스택 영역에 저장되며,
cal 인스턴스와 인스턴스 변수 i 는 힙 영역에 저장된다.

또한 Cal 클래스에 새로운 메서드를 정의하고, 호출하여 사용하게 되면 메서드에서 사용되는 지역변수와 매개변수는 스택 영역에 저장되며 Main 메서드의 실행이 끝나고나면 스택 영역의 메모리들은 제거되지만 힙 영역의 메모리는 제거가 되지 않고 남아있다가 GC에 의해 제거된다.

자바의 메모리 구조 스택, 힙, 메서드 영역에 대하여 정리를 해보았다.
머리로는 이해가 잘 되고 그림이 그려지는데 글로 정리를 하려니 조금 뒤죽박죽 되어 제대로 정리가 되지 않은 것 같다.

공부하며 정리와 복습을 위해 저장한 기록입니다. 틀린 부분 및 개선할 부분이 있다면 알려주시면 감사하겠습니다 !

profile
꿈이 많은 개발자 호소인

0개의 댓글