본문 바로가기

개발기술/Java

Java의 메모리 영역과 static의 의미

Java는 실행 중에 프로그램의 데이터를 저장하고 관리하기 위해 JVM(Java Virtual Machine) 내부에서 여러 메모리 영역으로 나누어 관리합니다. 주요 메모리 영역은 다음과 같습니다:


1. 메모리 영역의 구성

  1. Method Area (메서드 영역):
    • 클래스 로더(Class Loader)에 의해 로드된 클래스와 관련된 메타데이터, static 변수, 상수, 메서드 코드, 클래스 정보 등이 저장됩니다.
    • 특징:
      • 모든 스레드가 공유.
      • 클래스 수준의 데이터를 저장하므로, 클래스가 한 번 로드되면 해당 데이터는 프로그램 종료 시까지 유지.
  2. Heap (힙 영역):
    • 모든 객체와 배열이 저장되는 영역.
    • JVM의 Garbage Collector에 의해 관리되며, 참조되지 않는 객체는 자동으로 제거됩니다.
    • 특징:
      • 모든 스레드가 공유.
      • 런타임에 동적으로 객체를 생성하고 메모리를 할당.
  3. Stack (스택 영역):
    • 각 스레드에 별도로 할당되는 영역으로, 지역 변수메서드 호출 정보(프레임)를 저장.
    • 메서드가 호출되면 스택에 프레임이 생성되고, 메서드가 종료되면 프레임이 제거됩니다.
    • 특징:
      • 메서드 호출 시 생성, 종료 시 제거.
      • LIFO(Last In First Out) 구조.
  4. PC Register (프로그램 카운터 레지스터):
    • 각 스레드에 별도로 존재하며, 현재 실행 중인 명령의 주소를 저장.
    • JVM이 실행할 명령어를 추적하기 위해 사용.
  5. Native Method Stack (네이티브 메서드 스택):
    • 네이티브 코드(C, C++ 등 JVM 외부 언어) 실행 시 사용하는 메모리 영역.
    • JNI(Java Native Interface)를 통해 호출되는 메서드의 정보를 저장.

static의 의미

static은 Java에서 클래스 수준의 변수를 선언하거나 메서드를 정의할 때 사용하는 키워드로, 공유고정이라는 개념과 관련이 있습니다.

1. static의 주요 특징

  1. 클래스 수준에서 관리:
    • static으로 선언된 변수나 메서드는 클래스 로드 시 메모리(Method Area)에 할당됩니다.
    • 객체 인스턴스와 무관하게, 클래스 자체에 속합니다.
  2. 공유 (Shared):
    • static 변수는 모든 객체가 공유합니다.
    • 클래스의 모든 인스턴스가 같은 값을 참조하며, 값이 변경되면 모든 인스턴스에 반영됩니다.
  3. 고정 (Fixed):
    • static 변수는 프로그램이 종료되거나 클래스가 언로드될 때까지 메모리에서 유지됩니다.

'개발기술 > Java' 카테고리의 다른 글

Java Blocking I/O vs non-Blocking I/O  (0) 2025.04.06
Exception Handling & Logging  (1) 2025.03.10
Java 코딩구현 심화 - 스트림,람다식  (0) 2024.09.20
Java 멀티쓰레드  (0) 2024.08.12
웹 스크래핑 Jsoup  (0) 2024.08.06