TIL

[국비지원과정19] JVM 구조

공부하고 기억하는 공간 2023. 8. 6. 20:30
728x90
반응형
SMALL
그동안 너무 바빠서 한동안 못 올렸던 국비지원과정 교육 내용을 다시 기록하려고 한다...
나태한 내 자신 스스로 채찍질 해야해..ㅠㅠ

우선 JVM의 구조를 간단히 보자.
그림은 좀 깔끔하지 못하지만 최선을 다했다.

🟰메서드 영역(Method area)
☀️ 프로그램 실행 중에 어떤 클래스가 호출되면, JVM은 해당 클래스의 컴파일 된 클래스파일(.class)을 읽어서 분석하여 해당 클래스에 대한 정보를 이곳에 저장한다. 이 때 해당 클래스의 클래스변수도 이 영역에 함께 생성된다.
☀️만약 클래스 메서드와 인스턴스 메서드가 있다면 먼저 호출되는 것은 클래스 메서드이다.
☀️왜냐하면 인스턴스 메서드보다 메서드 영역의 클래스 메서드가 먼저 호출되기 떄문이다.

🟰힙(Heap)
☀️인스턴스가 생성되는 공간. 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에서 생성된다. 인스턴스가 생성되면서 인스턴스변수들이 함께 생성된다.

🟰호출스택(call stack / excution stack)
☀️메서드 작업에 필요한 메모리 공간을 제공한다.
☀️메서드가 호출되면 호출스택에 호출된 메서드를 위한 메모리가 할당된다.
☀️말 그대로 스택이기 때문에 가장 최근에 호출된 메서드부터 차례대로 수행된다.
☀️메서드가 모든 수행을 마치면 호출스택에서 제거된다.

⏬위 내용을 돕기위한 예시코드!
이 코드들을 수행하면서 메서드의 수행 단계를 잘 생각해보자.
class CallStackTest{
	public static void main(String[] args) {
    	firstMethod();
    }
    
    static void firstMethod() {
    	secondMethod();
    }
	
    static void secondMethod() {
    	System.out.println("secondMethod()");
    }
}​

아래와 같이
📌secondMethod()가 가장 먼저 수행되고제거된다음
📌firstMethod()가 수행되며
📌그 뒤 메인메서드가 종료될 것이다.

728x90
반응형
SMALL