Notice
Recent Posts
Recent Comments
Link
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

ki-sd 님의 블로그

[2026-03-16] 메모리 영역과 static 키워드의 메커니즘 본문

JavaStudy

[2026-03-16] 메모리 영역과 static 키워드의 메커니즘

ki-sd 2026. 4. 13. 17:43

자바의 진정한 이해는 메모리 구조를 파악하는 것에서 시작된다. JVM(Java Virtual Machine)의 메모리 영역 중에서도 특히 클래스 멤버와 인스턴스 멤버의 차이를 가르는 static 키워드의 본질을 깊이 파고들었다.

 

1. JVM 메모리 구조의 3대 영역

  • 메서드 영역(Method Area / Class Area): 프로그램이 실행될 때 클래스 파일이 메모리에 로드되면서 그 구조(필드, 메서드 정보 등)와 static 변수가 저장되는 공간이다. 프로그램이 시작될 때부터 종료될 때까지 메모리에 상주한다.
  • 힙 영역(Heap Area): new 키워드를 통해 동적으로 생성되는 객체(인스턴스)와 배열이 저장되는 공간이다. 더 이상 참조되지 않는 데이터는 가비지 컬렉터(Garbage Collector)에 의해 주기적으로 청소된다.
  • 스택 영역(Stack Area): 메서드 호출 시 생성되는 지역 변수와 매개 변수가 저장되며, 메서드 실행이 끝나면 즉시 소멸되는 임시 저장 공간이다.

2. static의 원리와 생명주기(Lifecycle)

  • 공유 데이터의 개념: static 키워드가 붙은 변수나 메서드는 클래스가 메모리에 로드되는 시점에 단 한 번, 메서드 영역에 할당된다. 즉, 객체를 생성(new)하지 않아도 클래스명.변수명 형식으로 즉시 접근할 수 있다.
  • 인스턴스 멤버와의 비교: 인스턴스 변수는 객체가 생성될 때마다 힙 영역에 개별적으로 만들어져 각기 다른 값을 유지하지만, static 변수는 해당 클래스로 만든 모든 객체가 동일한 메모리 주소를 바라보며 값을 공유한다.
  • 설계 시 주의점: 무분별한 static 사용은 프로그램 시작부터 종료 시점까지 메모리를 차지하므로 자원 낭비를 초래할 수 있다. 오직 모든 인스턴스가 공통으로 공유해야 하는 상수나 유틸리티성 메서드에만 제한적으로 사용해야 함을 명확히 했다.