m1ndy5's coding blog

Java의 메모리 영역 본문

CS Study

Java의 메모리 영역

정민됴 2024. 3. 7. 08:55

자바 프로그램이 실행되면 JVM은 OS로부터 메모리를 할당받고, 그 메모리를 용도에 따라서 여러 영역으로 나누어 관리한다.

JVM의 메모리 공간은 크게 Method(Static) 영역, Stack 영역, Heap 영역으로 구분되고 데이터 타입에 따라 각 영역에 나눠져 할당된다.

자바 변수의 종류

변수는 크게 네 종류로 변수의 선언된 위치에 따라 클래스 변수, 인스턴스 변수, 지역변수, 매개변수로 나뉜다.

public class Main{
	public static void main(String[] args){ // 매개변수
    	int num = 990; // 지역변수
    }
}

public class Counter {
	private int state = 0; // 인스턴스 변수
    
    public static int gate = 100; // 클래스 변수
    
    public int get() {
    	return state;
    }
}

 

- 클래스 변수 : 클래스 영역에서 타입 앞에 static이 붙는 변수

- 인스턴스 변수 : 클래스 영역에서 static이 아닌 변수

- 지역 변수 : 메서드 내에서 선언되고 메서드 수행이 끝나면 소멸되는 변수

- 매개 변수 : 메서드 호출 시 전달되는 값을 가지고 있는 변수

 

각 변수의 생성시기는

1. 클래스 변수 : 클래스가 메모리에 올라갈 때

2. 인스턴스 변수 : 인스턴스가 생성되었을 때

3. 지역변수 / 매개변수 : 위치하고 있는 메서드가 수행되었을 때

이다.

 

Method(Static) 영역

JVM이 동작해서 클래스가 로딩될 때 생성된다.

JVM이 읽어들인 클래스와 인터페이스에 대한 런타임 상수 풀, 멤버 변수(필드), 클래스 변수(Static 변수), 상수(final), 생성자(constructor), 메서드(method) 등을 저장하는 공간이다.

Method 영역의 데이터는 프로그램의 시작부터 종료까지 메모리에 남아있다.

 

Stack 영역

메서드 내에서 정의하는 기본 자료형에 해당되는 지역변수의 데이터 값이 저장되는 공간이다.

메서드가 호출될 때 스택 영역에 스택 프레임이 생기고 그 안에 메서드를 호출한다.

원시 자료형(int, double, byte, long, boolean 등)에 해당되는 지역변수, 매개 변수 값이 저장된다.

메서드가 호출될 때 메모리에 할당되고 종료되면 메모리에서 사라진다.

LIFO 특성을 가진다.

 

Heap 영역

JVM이 관리하는 프로그램 상에서 데이터를 저장하기 위해 런타임 시 동적으로 할당하여 사용한다.

참조 자료형(객체, 배열 등)이 저장되는 공간이다.

Heap 영역에 있는 오브젝트들을 가리키는 참조 변수들은 stack에 적재된다.

Heap 영역은 Stack 영역과 달리 보관되는 메모리가 호출이 끝나도 삭제되지 않고 유지되지만 어떤 참조 변수도 Heap 영역에 있는 인스턴스를 참조하지 않게 된다면 GC에 의해 메모리에서 청소된다.

 

 

결론

JVM의 메모리 공간은 메서드 영역, 스택 영역, 힙 영역으로 나눠져 있다.

메서드 영역은 클래스가 로딩될 때 생성되어 클래스와 인터페이스에 대한 멤버 변수, 메서드, 클래스 변수, 상수 등을 저장한다.

스택 영역은 원시 자료형이 저장되는 곳으로 메서드가 호출될 때 생성되고 호출이 완료되면 사라진다.

힙 영역은 단 하나만 존재하며 참조 자료형이 저장되고 호출이 끝나도 사라지지 않고 참조되지 않는다면 GC에 의해 청소된다.

 

참고 : https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EA%B7%B8%EB%A6%BC%EC%9C%BC%EB%A1%9C-%EB%B3%B4%EB%8A%94-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD%EC%8A%A4%ED%83%9D-%ED%9E%99

'CS Study' 카테고리의 다른 글

JPA의 동작원리  (1) 2024.03.13
Garbage Collector  (1) 2024.03.07
JVM, JRE, JDK & 자바 프로그램의 실행 과정  (0) 2024.03.07
영속성 컨텍스트  (0) 2024.03.06
JPA 도입 시 고려해 볼 사항  (0) 2024.03.06