inblog logo
|
heo-gom
    java

    static, heap, stack 메모리 영역

    허성재's avatar
    허성재
    Aug 13, 2024
    static, heap, stack 메모리 영역
     

    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

    heo-gom

    RSS·Powered by Inblog