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 |