본문 바로가기

JAVA

[ JAVA / 자바 ] 메모리 구조 (static, stack, heap)

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 변수는 할당된 값에서 초기화되지 않고 더해진 것을 확인할 수 있다.