Java의 메모리 구조는 JVM에 의해 관리되며, 크게 메소드 영역(Method Area), 힙 영역(Heap Area), 스택 영역(Stack Area), PC 레지스터(Program Counter Register), 네이티브 메소드 스택(Native Method Stack)으로 구분됩니다. 각각의 메모리 영역은 프로그램 실행 시 다른 역할을 담당합니다.
new
키워드로 생성된 객체는 모두 힙 영역에 할당됩니다.public class MemoryExample {
// 메소드 영역에 저장되는 static 변수
private static String staticVar = "I'm in Method Area";
public static void main(String[] args) {
// 스택에 저장되는 지역 변수
int localVar = 10;
// 힙에 저장되는 객체
Person person = new Person("Alice");
System.out.println(staticVar); // 메소드 영역에서 가져옴
System.out.println(person.getName()); // 힙 영역에서 가져옴
}
}
class Person {
// 힙 영역에 저장되는 인스턴스 변수
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Java의 메모리 구조는 Method Area, Heap, Stack, PC Register, Native Method Stack으로 나뉘며, 각각의 영역이 역할을 분담하여 프로그램이 원활히 실행되도록 돕습니다. 메모리 관리는 JVM에 의해 자동으로 이루어지지만, 힙 영역에서의 과도한 객체 생성은 Out of Memory(OOM) 에러를 일으킬 수 있습니다. 효율적인 메모리 관리를 위해 객체의 생명 주기를 파악하고 필요 없는 객체는 Garbage Collection을 통해 해제되도록 해야 합니다.