Java

자바의 메모리(Memory) 영역 개념

567Rabbit 2024. 5. 31. 15:21

 

 

 

1. 메소드 영역(Method Area) (= 데이터 영역) 

 

- 메소드 영역은 클래스 정보(클래스 이름, 메소드, 변수)와 같은 런타임 상수 풀을 포함하고 있는 메모리 영역이다.

- Static 영역이라고도 하며 전역변수와 정적 멤버변수가 저장되는 영역이다.

- Static 영역은 일반적으로 프로그램이 로드될 때 메모리에 할당되며, 프로그램이 실행되는 동안 그 크기와 위치가 변경되지 않음

- 이는 프로그램의 실행 중에 고정된 데이터가 항상 동일한 위치에 저장되어야 하기 때문에 중요한 개념

 

 

* * Static 영역에는 주로 다음과 같은 데이터가 포함된다 **

  • 멤버 변수 = 전역 변수 (Global Variables) : 함수 밖에서 선언된 변수로, 프로그램 전체에서 접근 가능하다. 이러한 변수들은 프로그램이 시작될 때 메모리에 할당되고 프로그램이 종료될 때까지 존재한다.
  • 지역 변수 = 정적 변수 (Static Variables) : 함수 내 또는 함수 밖에서 static 키워드로 선언된 변수로, 선언된 블록 내에서만 접근 가능하지만, 프로그램의 실행 기간 동안 메모리에 유지된다. 함수 내에서 선언된 정적 변수는 함수가 여러 번 호출되더라도 그 값을 유지한다.
  • 상수 데이터 (Constant Data) : 프로그램 내에서 변하지 않는 데이터이다. 예를 들어, 문자열 리터럴과 같은 상수 값들이 있다.

 

 

 

2. 스택(Stack)

 

스택은 메소드 호출과 관련된 정보(지역 변수, 매개 변수, 임시 데이터 등)를 저장하는 메모리 영역이다.

작업영역이라고도 한다.

- 프레임: 각 메소드 호출마다 하나의 프레임이 생성된다.

- 지역 변수: 메소드 내부에서 선언된 변수.

- 호출 스택: 현재 메소드가 호출된 순서대로 쌓인다

- 특징: 각 스레드마다 독립된 스택을 가진다. 메소드 호출이 끝나면 스택 프레임은 자동으로 제거된다

 

 

 

 

3. 힙(Heap)

 

힙은 동적으로 생성된 객체와 배열을 저장하는 메모리 영역이다.

- 객체: new 키워드를 통해 생성된 인스턴스.

- 배열: 동적으로 할당된 배열.

- 특징: 모든 스레드가 공유하며, 자바는 가비지 컬렉션을 통해 사용하지 않는 객체를 자동으로 정리한다

  •  

 

자바의 메모리 구조는 이처럼 다양한 영역을 통해 효율적이고 안전한 메모리 관리를 가능하게 한다.