Java는 실행 중에 프로그램의 데이터를 저장하고 관리하기 위해 JVM(Java Virtual Machine) 내부에서 여러 메모리 영역으로 나누어 관리합니다. 주요 메모리 영역은 다음과 같습니다:
1. 메모리 영역의 구성
- Method Area (메서드 영역):
- 클래스 로더(Class Loader)에 의해 로드된 클래스와 관련된 메타데이터, static 변수, 상수, 메서드 코드, 클래스 정보 등이 저장됩니다.
- 특징:
- 모든 스레드가 공유.
- 클래스 수준의 데이터를 저장하므로, 클래스가 한 번 로드되면 해당 데이터는 프로그램 종료 시까지 유지.
- Heap (힙 영역):
- 모든 객체와 배열이 저장되는 영역.
- JVM의 Garbage Collector에 의해 관리되며, 참조되지 않는 객체는 자동으로 제거됩니다.
- 특징:
- 모든 스레드가 공유.
- 런타임에 동적으로 객체를 생성하고 메모리를 할당.
- Stack (스택 영역):
- 각 스레드에 별도로 할당되는 영역으로, 지역 변수와 메서드 호출 정보(프레임)를 저장.
- 메서드가 호출되면 스택에 프레임이 생성되고, 메서드가 종료되면 프레임이 제거됩니다.
- 특징:
- 메서드 호출 시 생성, 종료 시 제거.
- LIFO(Last In First Out) 구조.
- PC Register (프로그램 카운터 레지스터):
- 각 스레드에 별도로 존재하며, 현재 실행 중인 명령의 주소를 저장.
- JVM이 실행할 명령어를 추적하기 위해 사용.
- Native Method Stack (네이티브 메서드 스택):
- 네이티브 코드(C, C++ 등 JVM 외부 언어) 실행 시 사용하는 메모리 영역.
- JNI(Java Native Interface)를 통해 호출되는 메서드의 정보를 저장.
static의 의미
static은 Java에서 클래스 수준의 변수를 선언하거나 메서드를 정의할 때 사용하는 키워드로, 공유와 고정이라는 개념과 관련이 있습니다.
1. static의 주요 특징
- 클래스 수준에서 관리:
- static으로 선언된 변수나 메서드는 클래스 로드 시 메모리(Method Area)에 할당됩니다.
- 객체 인스턴스와 무관하게, 클래스 자체에 속합니다.
- 공유 (Shared):
- static 변수는 모든 객체가 공유합니다.
- 클래스의 모든 인스턴스가 같은 값을 참조하며, 값이 변경되면 모든 인스턴스에 반영됩니다.
- 고정 (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 |