JVM은 OS에서 할당받은 메모리 영역을 메서드 영역, 스레드 영역, 힙 영역과 같이 세부 영역으로 구분해서 사용한다.
메서드 영역에는 코드에서 사용되는 클래스 별로 런타임 상수 풀, 필드 / 메서드 데이터, 메서드 코드, 생성자 코드 등을 분류해서 저장한다
메서드 영역은 JVM이 시작될 때 모든 스레드가 공유하는 영역이다
힙 영역은 객체와 배열이 생성되는 영역으로 JVM 스택 영역의 변수나 다른 객체의 필드를 참조한다
참조하는 변수나 필드가 없다면 쓰레기 값으로 취급하여 제거된다
메서드 수행에 필요한 메모리가 제공되는 공간
메서드가 호출되면 호출 스택에 메모리를 할당하고, 종료되면 해제한다
스택 영역은 각 스레드마다 하나씩 존재하며 스레드가 시작될 때 할당된다
class Stack {
public static void main(String[] args) {
System.out.println("Hello");
}
}
main
메서드가 올라간다main
에서 호출한 println
메서드가 스택 영역에 올라가게 된다println
메서드가 실행되고 종료된 후 해제된다main
메서드로 돌아오고 종료된 후 프로그램이 종료된다