1. Static 메모리
Static 메모리는 Java에서 정적 변수와 클래스 변수가 저장되는 메모리 영역입니다.
- 특징:
- static키워드로 선언된 변수와 메서드는 프로그램이 시작될 때 메모리에 로드됩니다.
- 클래스 로더에 의해 메모리 할당이 이루어지며, 프로그램 종료 시까지 유지됩니다.
- 모든 객체가 공유하며, 하나의 고정된 메모리 위치를 가집니다.
- 사용 예:
class Example {
    static int staticVar = 10;  // Static 메모리에 저장
    static void staticMethod() {
        System.out.println("Static method called");
    }
}
public class Main {
    public static void main(String[] args) {
        System.out.println(Example.staticVar);  // staticVar는 모든 객체가 공유
        Example.staticMethod();  // staticMethod는 클래스 차원에서 호출 가능
    }
}staticVar와 staticMethod는 Example 클래스의 모든 인스턴스가 공유하는 정적 변수와 메서드로, JVM이 시작할 때 메모리에 로드됩니다.2. Heap 메모리
Heap 메모리는 Java에서 동적으로 할당되는 객체와 인스턴스 변수들이 저장되는 메모리 영역입니다.
- 특징:
- new키워드를 사용하여 생성된 모든 객체는 Heap에 할당됩니다.
- 객체는 가비지 컬렉터(Garbage Collector)에 의해 관리되며, 더 이상 참조되지 않는 객체는 자동으로 메모리에서 해제됩니다.
- 모든 인스턴스 변수들은 Heap에 저장됩니다.
- 사용 예:
class Person {
    String name;  // 인스턴스 변수는 Heap에 저장됨
    Person(String name) {
        this.name = name;
    }
}
public class Main {
    public static void main(String[] args) {
        Person person = new Person("John");  // Heap 메모리에 Person 객체가 생성됨
        System.out.println(person.name);
    }
}person 객체는 Heap 메모리에 생성되며, name 인스턴스 변수도 Heap에 저장됩니다.3. Stack 메모리
Stack 메모리는 Java에서 메서드 호출 시 생성되는 지역 변수와 메서드 호출 스택 프레임이 저장되는 메모리 영역입니다.
- 특징:
- 메서드가 호출될 때마다 메서드의 지역 변수와 매개변수가 스택에 저장됩니다.
- 메서드 호출이 끝나면 해당 메서드의 스택 프레임이 제거되고, 그 안에 있는 변수들도 함께 사라집니다.
- 빠르고 효율적이지만, 스택 오버플로우(Stack Overflow) 위험이 존재합니다. 이는 재귀 호출이 지나치게 깊어질 때 발생할 수 있습니다.
- 사용 예:
public class Main {
    public static void main(String[] args) {
        int localVar = 5;  // Stack 메모리에 저장됨
        Main main = new Main();
        main.methodA();
    }
    void methodA() {
        int anotherVar = 10;  // Stack 메모리에 저장됨
        methodB();
    }
    void methodB() {
        int yetAnotherVar = 15;  // Stack 메모리에 저장됨
    }
}
localVar, anotherVar, yetAnotherVar는 각각 main, methodA, methodB 메서드의 호출 시 스택에 저장됩니다. 메서드가 종료되면 해당 변수들은 스택에서 제거됩니다.요약
- Static 메모리: 클래스 변수와 정적 메서드가 저장되는 공간으로, 프로그램이 시작될 때부터 종료될 때까지 유지됩니다.
- Heap 메모리: 동적으로 생성된 객체와 인스턴스 변수가 저장되는 공간으로, 가비지 컬렉터에 의해 관리됩니다.
- Stack 메모리: 메서드 호출 시 생성되는 지역 변수와 메서드 호출 정보가 저장되는 공간으로, 메서드가 종료되면 자동으로 해제됩니다.
이 세 가지 메모리 영역은 Java 프로그램에서 데이터가 어떻게 관리되는지 이해하는 데 필수적이며, 효율적인 메모리 사용을 위해 각각의 특성을 잘 이해하고 활용하는 것이 중요합니다.
Share article