JAVA
[ JAVA / 자바 ] 메모리 구조 (static, stack, heap)
zzuvely
2022. 7. 1. 15:53
JAVA 메모리 영역
• Stack 영역
- 함수의 호출과 관계되는 지역변수와 매개 변수가 저장되는 영역
- 메소드가 호출될 때 메모리에 할당되고 종료되면 메모리가 해제된다.
• Heap 영역
- 참조형의 데이터 객체의 실제 데이터들이 담기는 영역
- Heap 영역의 참조 값을 Stack 영역의 객체가 갖고 있다.
- 메모리 공간이 동적으로 할당되고 해제된다.
• Data(Static) 영역
- 전역 변수와 정적(Static) 변수가 저장되는 영역
- 메모리상에 한번 할당되면 프로그램이 종료될 때 해제 된다.
예제
// StaticVar.java
public class StaticVar {
// 멤버 변수가 static일 경우, data(static) 영역에 저장
static int a = 1;
// 멤버 변수는 heap 영역에 저장
int b = 1;
void staticTest() {
a = a + 1;
b = b + 1;
System.out.println("static int a : " + a);
System.out.println("member int b : " + b);
}
}
// StaticMain.java
public class StaticMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
StaticVar v1 = new StaticVar();
v1.staticTest();
StaticVar v2 = new StaticVar();
v2.staticTest();
v2.staticTest();
}
}

* Stack 영역에 저장된 static 변수는 할당된 값에서 초기화되지 않고 더해진 것을 확인할 수 있다.