본문 바로가기

JAVA/JAVA

[자바의 정석] JVM의 메모리 구조

JVM의 메모리 구조

- 응용프로그램이 실행되면, JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당받고 JVM은 이 메모리를 용도에 따라 여러 영억으로 나누어 관리함

- 주요 영역(method area, call stack, heap)

1. 메서드 영역(method area)
   · 프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스파일(*.class)을 읽어서 분석하여 클래스에 대한 정보(클래스 데이터)를 이곳에 저장. 이 때, 그 클래스의 클래스변수(class variable)도 이 영역에 함께 생성됨

2. 힙(heap)
   · 인스턴스가 생성되는 공간. 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성됨. 인스턴스변수(instance variable)들이 생성되는 공간.

3. 호출스택(call stack 또는 execution stack)
   · 메서드가 호출되면 수행에 필요한 만큼의 메모리를 스택에 할당받음
   · 메서드가 수행을 마치고나면 사용했던 메모리를 반환하고 스택에서 제거됨
   · 호출스택의 제일 취에 있는 메서드가 현재 실행 중인 메서드임
   · 아래에 있는 메서드가 바로 위의 메서드를 호출한 메서드(호출된 메서드가 수행 종료될 때까지 대기상태)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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()이 끝났음.");
    }
 
}
 
cs

 

<결과>

main(String[] args)이 시작되었음.
firstMethod()이 시작되었음.
secondMethod()이 시작되었음.
secondMethod()이 끝났음.
firstMethod()이 끝났음.
main(String[] args)이 끝났음.

 

참고 도서 : <자바의 정석>, 남궁 성

참고 자료 : https://acet.pe.kr/453

'JAVA > JAVA' 카테고리의 다른 글

[자바의 정석] 3-5 생성자  (0) 2020.03.11
[자바의 정석] 3-4 오버로딩(overloading)  (0) 2020.03.11
[자바의 정석] 6-1 객체지향언어  (0) 2020.03.09
자바의 정석 [5-1] 배열  (0) 2020.03.08
VS Code에 자바 설치하기  (0) 2020.03.05