[Java] JVM 메모리구조

Hoplin·2023년 1월 5일
0

Java는 JVM(Java Virtual Memory)위에서 동작한다. 이 덕분에 하나의 자바 코드로 여러 운영체제에서 동일하게 동작시킬 수 있다(쓰레드 개념에서 일부 제외)

JVM은 시스템으로부터 프로그램을 실행하기 위한 메모리를 할당받고 이를 여러 영역으로 나누어 관리한다. 주요 3가지 영역은 아래와 같다

  1. 메소드 영역(Method Area) : 프로그램중 특정 클래스가 사용되면 JVM은 해당 클래스의 클래스 파일을 읽어들인 후 클래스에 대한 정보를 메소드 영역에 저장한다. 클래스의 클래스 변수 또한 이곳에 저장된다.
  1. 힙 영역(Head Area) : 인스턴스가 생성되는 공간이다. 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에서 생성된다. 즉 인스턴스 변수들이 생성되는 공간이다.
  1. 호출스택(Call Stack) : 호출스택은 메소드의 작업에 필요한 메모리 공간을 제공한다. 메소드가 호출되면, 호출스택에는 메소드를 위한 메모리가 할당되고, 메소드 작업을 하는 동안 매개변수를 포함한 지역변수들과 중간 결과들을 저장할 때 사용된다. 작업이 완료된 후에는 메모리 공간을 반환하여 비운다.

예를 들어 아래와 같은 코드가 있다고 가정하자

class example{

    public static void main(String[] args){
        test1 t = new test1();
        t.method1();
    }
}

class test1{
    private static final int number = 10;
    private int iv = 20;
    public void method1(){
        this.method2();
    }

    protected void method2(){
        System.out.println(test1.number);
    }

그러면 각 영역은 아래와 같은 상태를 가진다. (Call Stack은 실행 흐름에 따라 하니씩 pop 된다)

profile
더 나은 내일을 위해 오늘의 중괄호를 엽니다

0개의 댓글