본문으로 바로가기

[Java]JVM 동작 방식과 메모리 구조

category Computer Science 2022. 8. 6. 06:31
728x90
반응형

▷ JVM 동작 방식

1. 자바 프로그램을 실행하면 JVM은 OS로부터 메모리를 할당받는다.
2. 자바 컴파일러가 자바 소스코드(.java)를 자바 바이트코드(.class)로 컴파일한다.
3. Class Loader를 통해 바이트코드를 JVM Data Runtime Area로 로딩한다.
4. Runtime Data Area에 로딩된 바이트코드는 Execution Engine을 통해 실행된다.

▷ JVM 구조

JVM

  • Java Virtual Machine
  • Java와 OS 사이에서 중계자 역할을 수행
  • 자바가 OS 종류와 플랫폼에 관계없이 독립적으로 실행 가능하도록 지원한다.
  • GC를 통하여 자동으로 메모리 관리를 해준다.

Class Loader

  • 생성된 바이트코드를 묶어 JVM이 운영체제로부터 할당받은 영역인 Runtime Data Area에 배치

Execution Engine

  • 배치된 바이트코드를 기계어로 변경하여 명령어 단위로 실행
  • 바이트코드를 운영체제에 맞게 해석해주는 역할
  • 명령어 단위로 실행할 때 인터프리터와 JIT 두 가지 방식을 사용한다.

Garbage Collector

  • 생성된 객체의 생존 여부를 판단하여 더 이상 참조되지 않거나 Null인 객체의 메모리를 해제한다.
  • Runtime Data Area 영역의 Heap 영역을 관리한다.

Runtime Data Area

  • JVM이 실행되면서 OS로부터 할당받은 메모리 공간

▷ JVM 메모리 구조

Method Area

  • 클래스 파일의 바이트 코드가 로드되는 곳으로써 JVM이 무엇인가를 실행하려면 먼저 그 바이트 코드들이 메모리 공간에 저장되어 있어야 함
  • JVM이 동작해서 클래스가 로딩될 때 생성
  • 클래스정보(멤버변수명), 변수정보(데이터 타입, 접근 제어자 정보), 메소드 정보, static 변수, 전역 변수, 상수풀 등이 저장되는 영역
  • 프로그램의 시작부터 종료가 될 때까지 메모리에 남아있음

Heap Area

  • New 키워드로 생성된 객체와 배열이 생성되는 영역
  • 주기적으로 GC가 제거하는 영역

Stack Area

  • 지역변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값 등이 생성되는 영역
  • 해당 메소드가 호출될 때 메모리에 할당되고 종료되면 메모리가 해제

PC Register

  • 스레드가 생성될 때마다 생성되는 영역
  • 스레드가 실행되는 부분의 주소와 명령을 저장하고 있는 영역

Native Method Stack

  • 자바 이외의 언어로 작성된 네이티브 코드가 실행될 때 사용되는 메모리 영역
반응형