JAVA
메모리 (Memory)
김T준
2021. 7. 19. 20:11
728x90
Memory
1. 메소드 영역
클래스 데이터 (클래스 변수)
프로그램 실행 중 어떤 클래스가 사용되면,
JVM은 해당 클래스 파일을 읽어서 클래스 데이터를 이곳에 저장하며 동시에 클래스 변수도 이곳에 생성
2. 호출스택
메인 메소드(지역 변수)
메소드 작업에 필요한 메모리 공간을 제공
메소드가 호출되면 호출스택에 메소드 활용을 위한 메모리가 할당된다.
메모리에서 메소드가 작업을 하는 동안 지역변수와 연산의 중간 결과가 저장된다.
메소드가 작업을 마치면 할당된 메모리 공간은 반환되어 비워진다.
호출스택은 제일 상위에 있는 메소드가 지금 실행 중인 메소드 이다.
아래에 있는 메소드가 바로 위에 있는 메소드를 호출해서 사용중인 메소드 이다.
나머지는 모두 대기중
3. 힙 영역
인스턴스(인스턴스 변수)
인스턴스가 이곳에 생성된다.
ex)
public class memory {
public static void main(String[] args) {
System.out.println("메인 메소드 시작");
first();
System.out.println("메인 메소드 끝");
}
public static void first() {
System.out.println("first 메소드 시작입니다.");
second(); //세컨드 호출
System.out.println("first 메소드 종료입니다.");
}
public static void second() {
System.out.println("second 시작입니다.");
System.out.println("second 끝 입니다.");
}
}
[실행결과]
메인 메소드 시작
first 메소드 시작입니다.
second 시작입니다.
second 끝 입니다.
first 메소드 종료입니다.
메인 메소드 끝