JAVA/객체지향프로그래밍1

[JAVA] 호출 스택(call stack)

prize1209 2021. 6. 20. 01:52

JVM메모리 구조

 

메서드영역(Method Area)

- 클래스 정보와 클래스변수가 저장되는 곳

 

호출스택(Call Stack)

- 메서드의 작업공간. 메서드가 호출되면 메서드 수행에 필요한 메모리공간을 할당받고 메서드가 종료되면 사용하던 메모리를 반환한다.

 

힙(Heap)

- 인스턴스가 생성되는 공간. new연산자에 의해서 생성되는 배열과 객체는 모두 여기에 생성된다.

 

 

-메서드가 호출되면 수행에 필요한 만큼의 메모리를 스택에 할당받는다.

-메서드가 수행을 마치고 나면 사용했던 메모리를 반환하고 스택에서 제거된다.

-호출스택의 제일 위에 있는 메서드가 현재 실행 중인 메서드이다.

-아래에 있는 메서드가 바로 위의 메서드를 호출한 메서드이다.

 

 

 

 

예7)

public class CallStackTest {
	public static void main(String[] args) {
		firstMethod(); // static 메서드는 객체 생성없이 호출 가능하다.

	}

	static void firstMethod() {
		secondMethod();
	}

	static void secondMethod() {
		System.out.println("secondMethod()");
	}
}

예7 스택 흐름

 

 

 

 

메서드가 호출되면 호출스택에 메모리 할당. 종료되면 해제

아래 있는 메서드가 위의 메서드를 호출한 것

맨 위의 메서드 하나만 실행 중, 나머지는 대기중

 

 

예8)

public class CallStackTest2 {
	public static void main(String[] args) {
		System.out.println("main(String[] args)이 시작되었음");
		firstMethod();
		System.out.println("main(String[] args)이 끝났음");	
	}
	static void firstMethod() {
		System.out.println("firstMethod 시작");
		secondMethod();
		System.out.println("firstMethod 종료");
	}
	static void secondMethod() {
		System.out.println("secondMethod 시작");
		System.out.println("secondMethod 끝");		
	}
}

 

 

 

'JAVA > 객체지향프로그래밍1' 카테고리의 다른 글

[JAVA] 참조형 반환타입  (0) 2021.06.20
[JAVA]기본형 매개변수와 참조형 매개변수  (0) 2021.06.20
[JAVA] return문  (0) 2021.06.20
[JAVA]메서드  (0) 2021.06.20
[JAVA] 변수와 메서드-변수  (0) 2021.06.19