본문 바로가기
Dev/Java

『Java』 Java Virtual Machine & Runtime Data Areas

by 세대교체 2024. 10. 23.

JVM (Java Virtual Machine)

JVM은 자바 애플리케이션을 실행하기 위한 가상 머신이다. 자바 소스 코드로 부터 컴파일 과정을 거쳐 바이트 코드(.class)를 실행한다.
하나의 바이트 코드(.class)로 모든 플랫폼에서 동작 가능하다.
 
  • Java는 플랫폼 종속적이지 않다.
    • 컴파일된 바이트 코드로 어떤 JVM에서도 동작 시킬 수 있다.
  • JVM은 플랫폼 종속적이다.
    • 리눅스의 JVM과 윈도우의 JVM은 서로 다르다.

 

 

Java Application 실행 과정

 

  1. 자바로 개발된 애플리케이션을 실행하면 JVM은 OS로부터 메모리를 할당한다.
  2. 자바 컴파일러(javac)가 자바 소스 코드(.java)를 자바 바이트 코드(.class)로 컴파일한다.
  3. 클래스 로더를 통해 JVM Runtime Data Area로 로딩한다.
  4. 로딩된 바이트 코드를 JVM에 전달하면 애플리케이션을 실행할 때 JVM이 기계어로 해석한다.
 

 

JVM 상세 구조

 

Class Loader

자바는 동적으로 클래스를 읽어오기 때문에 런타임 시 JVM가 연결된다.

한 번에 메모리에 모든 클래스를 로드하는 것이 아닌, 필요한 순간에 해당 클래스(.class) 파일을 찾아 메모리에 로딩해 주는 역할이다.

 

Execution Engine

실행 엔진은 클래스를 실행시키는 역할이다.

클래스 로더가 JVM 내의 Runtime Data Area에 바이트 코드를 배치시킨 뒤 Execution Engine에 의해 실행된다. 

 

Garbage Collector

더 이상 참조되지 않는 객체를 모아서 정리한다.

 

 

Memory (Runtime Data Areas)

JVM 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역이다.

 

모든 스레드가 공유해서 사용 (GC 대상) 스레드마다 하나씩 생성
Method Area

- 클래스 멤버 변수의 이름, 데이터 타입, 접근 제어자 정보와 같은 각종 필드 정보들.

- 메서드 정보, 데이터 타입 정보, constant pool, static 변수,
final class 등.
Stack Area

- 지역 변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값 등이 생성되는 영역.
Heap Area

- new 키워드로 생성된 객체와 배열이 생성되는 영역.

- 주기적으로 GC가 제거하는 영역.
PC Register

- 스레드가 생성될 때마다 생성되는 영역으로 프로그램 카운터, 
즉 현재 스레드가 실행되는 부분의 주소와 명령을 저장.
  Native Method Stack

- 자바 이외의 언어 (c, c++ 등)로 작성된 네이티브 코드를 실행할 때 사용되는 메모리 영역으로 일반적인 C 스택을 사용.