Post

Java 메모리 영역

JVM and Java 컴파일 과정

◼︎ Java 메모리 영역

JVM의 전체적 구조

JVM(Java Virtual Machine)

  • 자바 ↔ 운영체제 사이의 중개자 역할
    • 자바가 운영체제에 구애받지 않고 실행할 수 있도록 도와줌

image

  1. Java 프로그램을 실행하면 JVM은 OS로부터 메모리를 할당
  2. Java 컴파일러(javac)가 자바 소스코드(.java)를 자바 바이트코드(.class)로 컴파일
  3. Class Loader를 통해 JVM Runtime Data Area로 로딩
  4. Class loader: 클래스 파일을 불러와서 메모리에 저장
  5. Runtime Data Area에 로딩된 .class들은 Execution Engine을 통해 해석
  6. 해석된 바이트 코드는 Runtime Data Area의 각 영역에 배치
  7. GC, 스레드 동기화 이뤄짐

Memory Area 구조

image

Method Area

  • JVM이 실행되며 생기는 공간
  • Class 정보, 전역변수 정보, Static 변수 정보가 저장되는 공간
  • 모든 스레드에서 정보가 공유

스택 영역(Stack Area)

  • 지역변수, 메소드의 매개변수와 같이 잠시 사용되고 필요없어지는 데이터가 저 장되는 공간 → 일시적 데이터 저장

힙 영역(Heap Area)

  • new 연산자로 생성된 객체, Array와 같은 동적으로 생성된 데이터가 저장
  • GC가 처리하지 않는 한 소멸되지 않는다
  • Reference Type의 데이터가 저장되는 공간
  • 모든 스레드에서 정보가 공유

스태틱 영역(Static Area)

  • static 변수를 저장
  • 스태틱 영역에 저장된 데이터는 프로그램이 종료될 때까지 유지

PC Register

  • 스레드가 생성되며 생기는 공간
  • 스레드가 어느 명령어를 처리하고 있는지 그 주소를 등록
  • JVM이 실행하고 있는 현재의 위치를 저장하는 역할

► 클래스 로더(Class Loader)

image

  1. JVM이 Java 프로그램을 실행할 때, .class 확장자를 가진 바이트 코드 파일을 묶어서
  2. JVM이 OS로부터 할당받은 메모리 영역인 Runtime Data Area로 배치하는 역할

► 실행 엔진(Execution Engine)

  1. Class Loader에 의해 Runtime Data Area의 Method Area로 배치되는데
  2. 배치된 이후 JVM은 실행 엔진에 제공하여, 정의된 내용대로 바이트 코드를 실행
  3. 바이트 코드를 실행하는 런타임 모듈이 실행 엔진
This post is licensed under CC BY 4.0 by the author.