1. 스택(Stack) 메모리
스택 메모리는 함수 호출과 관련된 데이터(로컬 변수, 함수 호출 스택 등)를 저장하는 데 사용된다. 스택은 LIFO(Last In, First Out) 구조를 따릅니다. 즉, 가장 나중에 저장된 데이터가 가장 먼저 꺼낸다.
주요 특징
- 로컬 변수: 함수나 메서드에서 선언된 변수는 스택 메모리에 저장된다. 이 변수들은 함수 호출이 끝나면 메모리에서 자동으로 제거된다.
- 메서드 호출: 각 메서드 호출에 대해 스택 프레임이 생성된다. 스택 프레임은 메서드의 로컬 변수, 매개변수, 반환 주소 등을 저장한다.
- 한정된 크기: 스택은 메모리의 크기가 제한되어 있으며, 너무 깊은 재귀 호출이나 지나치게 많은 메서드 호출로 인해 스택 오버플로우가 발생할 수 있다.
public void exampleMethod() {
int localVariable = 10; // 이 변수는 스택 메모리에 저장됨
}
2. 메서드(Method) 영역
메서드 영역은 자바의 메모리 관리에서 클래스와 관련된 메타데이터를 저장하는 영역이다. JVM(Java Virtual Machine)에서는 메서드 영역을 사용하여 클래스 정보, 메서드 정보, 상수 풀 등을 관리한다.
주요 특징
- 클래스 데이터: 클래스의 구조와 메타데이터(클래스 이름, 필드, 메서드 등)가 저장된다.
- 상수 풀: 클래스와 메서드에서 사용하는 상수(문자열, 상수값 등)가 저장된다.
- 정적 변수: static으로 선언된 변수와 메서드는 메서드 영역에 저장된다.
public class Example {
public static int staticVariable = 10; // static 변수는 메서드 영역에 저장됨
public void instanceMethod() {
// 메서드 영역에 메서드 정보가 저장됨
}
}
3. 힙(Heap) 메모리
힙 메모리는 동적으로 생성된 객체를 저장하는 메모리 영역이다. 자바에서는 new 키워드를 사용하여 객체를 생성하면 이 객체는 힙 메모리에 할당된다. 힙 메모리는 동적 메모리 할당을 지원하며, JVM의 가비지 컬렉터에 의해 관리된다.
주요 특징
- 객체 저장: 힙 메모리에는 객체의 인스턴스와 배열이 저장된다. 객체는 힙에서 생성되며, 참조는 스택에 저장된다.
- 가비지 컬렉션: 사용되지 않는 객체는 가비지 컬렉터에 의해 자동으로 메모리에서 제거된다. 이는 메모리 누수를 방지하고, 메모리 관리를 효율적으로 수행하는 데 도움이 된다.
- 비교적 큰 메모리 영역: 힙은 스택에 비해 상대적으로 큰 메모리 영역이다. 하지만, 많은 객체를 생성하면 메모리 부족 문제를 일으킬 수 있다.
public class Example {
public void createObject() {
ExampleObject obj = new ExampleObject(); // 객체는 힙 메모리에 저장됨
}
}
class ExampleObject {
// 객체의 데이터가 힙 메모리에 저장됨
}
간단하게 말하자면...
- 스택 메모리: 함수 호출과 로컬 변수를 관리하는 메모리 영역. LIFO 구조를 따르며, 메서드 호출 시 스택 프레임이 생성됨.
- 메서드 영역: 클래스 정보와 메타데이터를 저장하는 메모리 영역. 클래스와 메서드의 정보를 관리함.
- 힙 메모리: 동적으로 생성된 객체와 배열을 저장하는 메모리 영역. 가비지 컬렉터에 의해 관리되며, 메모리 누수를 방지하는 데 도움이 됨.
'Computer Science' 카테고리의 다른 글
자료 구조 - 복잡도 (0) | 2024.09.21 |
---|---|
트랜잭션과 무결성 (0) | 2024.09.14 |
CPU 스케줄링 알고리즘 (7) | 2024.09.07 |
메모리(Memory) (6) | 2024.09.01 |
Overflow, underflow (0) | 2024.08.10 |