순서
1.JVM : JAVA 이론
2.JAVA 메모리 구조
3.JAVA 변수
JVM(Java Virtual Machine)이란?
일반 애플리케이션의 코드는 OS만 거치고 하드웨어로 전달되는데, JVM은 OS에 종속적이지 않고, JAVA를 인식, 실행할 수 있게 하는 가상 컴퓨터이다.
- Class Loader:. class 파일을 JVM 메모리(RunTime Data Area)로 적재하는 역할.
- Execution Engine: 바이트 코드를 기계어로 변환해 실행하는 엔진(JIT 컴파일러 사용 가능).
- Garbage Collector: 참조되지 않는 객체를 탐색 후 제거하는 역할(GC 중 STW 발생).
- Runtime Data Area: JVM이 실행 중 데이터를 적재하는 메모리 영역.
- Method Area: 클래스 정보, static 변수, 상수 풀(Constant Pool) 등을 저장하는 영역.
- Heap Area: new 키워드로 생성된 객체와 배열이 저장되는 영역(GC 대상).
- Stack Area: 지역 변수, 파라미터, 연산 중 임시 값이 저장되는 영역.
- PC Register: 각 스레드마다 생성되며 현재 실행 중인 명령어의 주소를 저장.
- Native Stack Area: 네이티브 코드(C, C++ 등) 실행을 위한 메모리 영역.
메모리구조를 표현한 간단한 표
메모리 영역 | 저장되는 것 | 특징 |
Method Area | 클래스 정보, 메서드 코드, 정적 변수, 상수 풀 | 클래스 로딩 시, 모든 클래스 정보 저 |
Heap Area | 객체, 배열 | 객체 생성 시 메모리 할당, GC로 관리 |
Stack Area | 지역 변수, 메서드 파라미터, 리턴 값 | 메서드 호출 시마다 스택 프레임 생성, 종료 시 제거 |
PC Register | 현재 실행 중인 명령어 주소 | 각 스레드마다 존재, 프로그램 흐름 제어 |
Native Stack | 네이티브 메서드 관련 데이터 | 자바 외의 언어로 작성된 코드가 사용하는 스택 |
JAVA 실행순서
코드 작성 → 컴파일 → JVM이 실행 → 메모리 관리 → 종료
변수
변수란 사람들 마다 표현하는 방식이 다를 수 있지만, 간단하게 데이터 값을 담을 수 있는 상자이다.
그렇다면 변수는 어떻게 사용하는가?
변수의 구조
[자료형] [변수이름][세미콜론]
int a;
변수에는 각 클래스변수와 인스턴스변수, 지역 변수가 있다.
변수 종류 | 선언 위치 | 생성 시기 |
클래스 변수 (Static variable) |
클래스 영역 | 클래스가 메모리에 올라갈 때 |
인스턴스 변수 (Instance variable) |
클래스 영역 | 인스턴스가 생성될 때 |
지역 변수 (Local variable) |
클래스 영역 이외의 영역(메서드 등) | 변수 선언문이 수행되었을 때 |
1.클래스 변수 (static 변수)
- static 키워드가 붙은 변수
- 클래스가 로드될 때 메모리에 딱 한 번 생성되고 모든 객체가 공유
- 객체를 생성하지 않고도 클래스명.변수명으로 접근 가능
class Example {
static int classVar = 10; // 클래스 변수
}
System.out.println(Example.classVar); // 객체 없이 사용 가능
2. 인스턴스 변수 (멤버 변수)
- static이 없는 멤버 변수
- 객체(instance)마다 별도로 생성되므로 서로 다른 값을 가짐
- 객체가 생성될 때마다 메모리에 할당되고, 객체가 사라지면 삭제됨
class Example {
int instanceVar = 20; // 인스턴스 변수
}
Example obj1 = new Example();
Example obj2 = new Example();
obj1.instanceVar = 30; // obj1과 obj2는 서로 다른 값을 가짐
3. 지역 변수 (메서드 내부 변수)
- 메서드나 블록 {} 내부에서 선언된 변수
- 해당 블록이 실행될 때 생성되고, 끝나면 사라짐
- 다른 메서드에서 사용할 수 없음
- 반드시 초기화해야 사용 가능
class Example {
void method() {
int localVar = 40; // 지역 변수
System.out.println(localVar);
}
}
'JAVA' 카테고리의 다른 글
JAVA - Enum (0) | 2025.03.05 |
---|---|
JAVA - 제네릭(Generic) (1) | 2025.03.04 |
JAVA로 간단한 계산기 구현 2 (0) | 2025.02.28 |
JAVA 클래스와 객체 (0) | 2025.02.27 |
자바로 간단한 계산기 구현(if, while, switch, scanner) (0) | 2025.02.25 |