본문 바로가기
Java/Java 활용 개념 정리

[Java] JVM의 Memory 활용 개념(static 유무의 차이)

by Dev dreamer 2023. 1. 31.

💡 1. JVM이 실행 클래스를 실행하는 절차.(메서드에 staic 키워드가 있을 때)


 

TPC08 이라는 클래스가 있다고 하자

안에는 메인 메소드를 포함하고 있으며 add 라는 메소드도 가지고 있다.

 

이 메인 메소드와 add 메소드는 static 키워드가 있는 메소드이다.

 

이 특징을 기억하고 TPC08 class(실행클래스)를 실행하는 절차를 JVM 동작을 통해 자세하게 알아보자.

 

 

일단 위 코드를 실행시키면 해당 클래스의 디렉토리를 찾고

찾게 되면 클래스 내부에 static 키워드를 가지고 있는 메서드를 메모리로 바로 로딩 해준다.

main 메서드에 반드시 static이 붙어야 하는 이유도 이 시점에서 나온다.

클래스를 실행시키고 클래스를 찾아서 가장 먼저 하는것이 static 키워드가 있는 메서드를 메모리에 올려주는것.

 

그래서 main 메서드가 메모리에 올라가서 동작을 시작해야 그 코드가 전체적으로 실행이 되는 것이다.

 

Method Area 에 클래스 이름인 TPC08 이라는 꼬리표가 함께 붙은채 Main 메서드와 add 메서드가 추가된다.

 

메서드가 추가되면 static zone 에 있는 main() 메소드를 실행한다( 호출, 시작)

 

main() method가 호출되면 main() method의 호출 정보가 stack Area에 들어간다.(push)

 

그리고 마찬가지로 static zone 에서 add() method를 main 이 호출해주고 호출하면

 

add method() 호출정보가 stack Aread에 들어가게 된다.

 

add() method 에 static이 있기 때문에 main에서 바로 call 해줄 수 있는 것이다.

 

stack Area에 main() method가고 add가 이어서 들어오면

 

main이 가장 아래에 그리고 나중에 들어온 add가 그 위의 포지션을 차지하고 있다.

(stack LIFO(Last In First Out 구조)

 

그러면 stack Area에 main을 보던 PC의 위치가 나중에 들어온 add로 옮겨가고

 

stack Area 에서 각 main() method의 지역 변수의 데이터 값들을 전달해 준다.

 

PC가 위치해 있는 ADD 에 변수값이 전달되면 내부의 코드가 동작해주고 결과값인

 

return 값이 main 의 V로 옮겨지고 add() method 는 종료되어 밖으로 빠져나간다.

 

그러면 stackArea에는 main Method 만 남아 있으며 main() method 역시 코드가 종료되면 사라진다(빠져나간다)

 

 

 

💡 2. JVM이 실행 클래스를 실행하는 절차.(메서드에 staic 키워드가 없을 때)


 

이번엔 add() method 에 static 키워드가 없는 경우에 어떻게 main 과 동작하는지 살펴보겠다.

method Area 에 static이 붙은 main() method 만 static zone에 올라가 있는다.

 

static이 붙지 않은 즉 non static 메서드인 add() method 는 non static zone 에 올라가 있는다.

 

🔍 1. static zone 에 있는 main() method 는 stack Area로 이동한다.

Stack Area에 PC가 main() method 에 위치해 있으며 

🔍 2. main() 에서 heap Area에 클래스 객체를 만들어 add() 주소에 접근한다.

 

main 에서 new 연산자를 통해 heap Area에 TPC08의 객체를 만들어 주고

 

 

heap Area에 생성된 객체를 tpc라는 인스턴스 변수를 통해 add() method의 번지에 접근해 준다.

 

add() method 역시 메서드이기 때문에 method-Area에 존재하고 번지(주소값)만 heap Area에 잡힌다.

 

🔍 3. non-static add()에 접근하게 되면 add method()를 stack Area에 호출한다.

 

heap Area에 add() method 의 주소값에 접근 하게 되면

 

add 즉 non static zone 에 있던 add가 stack Area에 main 위로 추가가 되며

 

stack Area의 PC의 위치가 add() method로 옮겨가며 add() method가 동작을 시작한다.

 

그리고 add의 동작이 끝나면 main 만 남고 main 역시 코드의 실행이 모두 끝나게 되면 사라지고 프로그램이 종료된다.

 

 

 

 

 

 

 

 

Java 관련 개념을 알려주실 때 그 내부 동작이 어떻게 구현되는지 자세하게 알수 있는 강의입니다.

출처: Java TPC (생각하고, 표현하고, 코딩하고) 대시보드 - 인프런 | 강의 (inflearn.com)

댓글