JVM 메모리 구조

동동주·2024년 3월 29일

CS스터디_자바

목록 보기
4/19

JVM(Java Virtual Machine)

<Java의 특징>

  • 객체지향 프로그래밍 언어
  • 기본 자료형(Primitive type : 원시 자료형)을 제외한 모든 것들이 객체로 표현되어 있다.
  • JVM(Java Virtual Machine) 위에서 동작하기 때문에, OS에 독립적이다.
  • GC(Garbage Collector)를 통한 자동 메모리 관리가 되어 메모리를 직접 해제하지 않아도 된다.
  • JVM 위에서 동작하기 때문에 실행 속도가 상대적으로 느린 편이다.

JVM 구조와 컴파일 과정

  • Java 프로그램을 실행하면 JVM은 OS로부터 메모리를 할당받는다.
  • Java Compiler(javac)가 Java 소스코드(.java file)를 Java Byte Code(.class file)로 컴파일
  • Class Loader를 통해 Java Byte Code를 JVM Runtime Data Area로 로딩
  • Execution Engine의 Java Interpreter와 JIT Compiler를 통해 해석하여 기계어로 변환하여 실행된다.

Java(JVM) 메모리 구조

  • Java는 JVM(Java Virtual Machine)이 OS로부터 메모리를 할당받고, 그 메모리를 관리한다.
  • JVM 내에 Runtime Data Area가 존재하는데, 이는 JVM의 메모리 영역으로 Java Application을 실행할 때 사용되는 데이터들이 적재되는 공간이다.


위 그림에서 Heap과 Method 영역은 모든 Thread가 공통으로 사용되는 공간이고, Stack과 PC Register, Native Method Stack 공간은 Thread마다 하나씩 생성된다.

Method (static) 영역

클래스를 구성하는 각종 정보들( 변수명, 데이터 타입, 접근 제어자 정보, 메서드 명 등)이 저장되는 공간이다.

  • JVM이 동작해서 클래스가 로딩될 때 생성된다.
  • Runtime 상수 풀, 멤버 변수(필드), 클래스 변수(static), 상수(final), 생성자(constructor), 메서드(method) 등을 저장한다.
  • Method(static) 영역의 데이터는 프로그램 시작될 때부터 종료될 때까지 메모리에 남아있다.

Heap

Runtime 중에 동적으로 생성된 데이터들이 저장된다.
Heap 영역의 데이터는 Stack 영역의 데이터와 다르게 메모리에 대한 호출이 종료되어도 삭제되지 않고 유지된다.
그래서 GC가 동작할 때, 참조되고 있지 않은 인스턴스들은 제거되게 된다.

  • Reference Type(참조형) 데이터 타입을 갖는 객체 등이 저장되는 공간이다.
  • Heap 영역은 Thread에 상관없이 JVM 내에 단 하나의 Heap 영역만 존재하고, 공유한다.

JVM Stack

함수(메서드) 관련 데이터(지역변수, 매개변수, 리턴 값, 연산에 사용되는 임시 값 등) 들이 저장된다.

  • 메서드가 정의하는 기본 자료형(Primitive type)에 해당되는 지역변수의 데이터 값이 저장된다.
  • 메서드가 호출될 때 메모리에 할당되고 종료되면 메모리에서 제거된다.
  • 메서드가 호출될 때 스택 프레임이 생기고 그 안에 메서드를 호출한다.
  • Stack은 LIFO의 특징을 가진다.

PC Register

Thread가 생성될 때마다 생성되는 영역으로, 현재 수행 중인 JVM 명령어를 저장하고 있다.

0개의 댓글