Java/JVM의 메모리

JVM 이란?

Java Virtual Machine, 자바 가상 머신의 약자를 따서 부르는 용어로 생성된 자바 프로그램을 읽어 실행하는 역할을 수행한다.

Java 프로그램 실행과정

  1. 프로그램이 실행되면 JVM은 OS로 부터 메모리를 할당받는다
  2. 자바 컴파일러가 작성된 자바 소스코드(.java)를 읽어 바이트코드(.class)로 변환한다.
  3. 변환된 코드를 해석한다.
  4. 해석된 코드는 Runtime Data Area에 배치되어 실행된다

Runtime Data Aare

프로그램 수행을 위해 자바 프로그램 실행시 JVM이 OS로 부터 할당받는 메모리 공간으로 크게 5개의 공간으로 분류할 수 있다.

개별 스레드 할당

PC Register

-스레드가 시작될 때 마다 생기는 공간
-스레드가 어떤 명령을 실행하게 될지에 대한 부분을 기록

JVM Stacks

-스레드가 시작될 때 마다 생기는 공간
-지역 변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값들이 저장되는 영역

Native Method Area

-다른 프로그래밍 언어로 작성된 네이티브 코드를 위한 메모리 영역

스레드 공유 영역

Method Area

-클래스 멤버 변수의 이름, 데이터 타입, 접근 제어자 정보같은 필드 정보와 메소드의 이름, 리턴 타입, 파라미터, 접근 제어자 정보같은 메소드 정보, Type정보(Interface인지 class인지), Constant Pool(상수 풀 : 문자 상수, 타입, 필드, 객체 참조가 저장됨), static 변수, final class 변수등이 생성되는 영역

Heap

-전체 스레드와 공유하는 공간
-문자열을 리터럴 형식으로 선언시 생성되는 String Pool 영역 존재
-실제 데이터를 가진 인스턴스와 배열 등이 저장
-Garbage Collector가 참조되지 않은 메모리를 확인하고 제거하는 영역

예제

class Person {
    private int id;
    private String name;

    public Person(int id, String name) {
        this.id = id;
        this.name = name;
    }
}

public class Main {
    public static void main(String[] args) {
        int id = 1;
        String name = "whybe";
        Person person = null;
        person = buildPerson(id, name);
    }

    private static Person buildPerson(int id, String name) {
        return new Person(id, name);
    }
}

좋은 웹페이지 즐겨찾기