본문 바로가기

JAVA

[JAVA] 메서드가 메모리에 저장되는 과정


 

1. Static Mehtod의 경우

코드


다음과 같이 static으로 정의된 main과 add 메서드가 있다고 해봅니다.

main메서드는 변수 a와 b를 30, 50으로 선어하였고 add메서드를 통해 v를 선언하였습니다.

 

Method Area


Method Area는 byte code가 저장되는 영역으로 static zone, non-static zone으로 나누어 집니다.

클래스파일을 실행시키면 JVM은 main메서드를 제일먼저 찾습니다.

main과 add는 static으로 선언된 메서드이기 때문에 static zone에 저장이 됩니다.

 

Statck Area


Stack Area는 Stack으로 되어있기 때문에 LIFO( Last In First Out )구조 입니다.

그래서 제일 먼저 실행된 main메서드가 제일 아래에 있고, 그 위에 add메서드가 위치합니다.

 

add가 실행되고 sum을 return 하게 되면 제일 위에 있던 add메서드가 삭제되고 main 메서드만 남게 됩니다.

 

main메서드도 할일을 마치면 Stack Area에서 없어지며 프로그램이 종료됩니다.

 

2. 일반 메서드인 경우

 

코드


위의 코드와 다르게 이번에는 add메서드는 static 메서드가 아닌 일반 메서드 입니다.

 

Method & Static & Heap Area


처음에 프로그램이 실행되면 Method Area에는 static zone에는 main메서드가, non-static zone에는 add메서드가 존재하게 됩니다.

일반메서드인 add를 호출하기 위해서는 클래스이름을 이용한 '객체'를 만들어 호출해야 합니다.

// 객체 생성
TPC08 tpc = new TPC08

객체 선언 후 객체에서 add를 호출하면 Heap Area에서 add가 생성되고 이것은 non-static zone의 add를 가리키게 됩니다.

즉, "Heap Area의 add가 Method Area의 add를 포인터로 가리킨다" 라고 보면 될 것 같습니다.


 

 

 

출처

https://www.inflearn.com/course