본문 바로가기

Java/기초

[Java] JVM메모리 구조

JVM

  • 응용프로그램이 실행되면, 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당받고 이 메모리를 용도에 따라 여러 영역으로 나누어 관리
  • Stack
    • 차곡차곡 쌓인다. LIFO(Last In, First Out)

JVM의 메모리 구조

출처 : https://velog.io/@jeong11/Java-OOP-callstack

  1. 메소드 영역(Method Area)
    • 클래스 정보와 클래스 변수가 저장되는 곳
  2. 호출 스택(Call Stack)
    • 메소드의 작업공간
    • 메소드가 호출되면 호출 스택에 메모리 할당
    • 종료되면 사용하던 메모리 반환함
  3. 힙(Heap)
    • 인스턴스가 생성되는 공간
    • new연산자에 의해서 생성되는 배열과 객체는 모두 여기에 생성됨

호출 스택의 특징

출처 : https://velog.io/@jeong11/Java-OOP-callstack

  • 메소드가 호출되면 수행에 필요한 메모리를 스택에 할당받는다.
  • 메소드가 수행을 마치면 사용했던 메모리를 반환
  • 호출 스택의 제일 위에 있는 메소드가 현재 실행중인 메소드, 나머지는 대기중인 상태
  • 아래에 있는 메소드가 바로 위의 메소드를 호출한 메소드이다.

호출 스택 실행과정

class CallStackTest {
	public staic void main(String[] args) {
    	firstMethod();
    }
    static void firstMethod() {
    	secondMethod();
    }
    static void secondMethod() {
    	System.out.println("secondMethod()");
    }
}