자바 프로그램 실행 과정, JVM 동작 방식과 구조

2025. 2. 19. 17:34Java/Java 원리

자바 프로그램 실행 과정

https://yuna96.tistory.com/26

  1. 자바 소스 파일 (.java)
    • 사람이 이해할 수 있는 형태의 코드
    • 자바로 작성된 원시 코드
  2. 자바 컴파일러 (javac.exe)
    • 자바 컴파일러는 .java 파일을 받아들여 바이트 코드인 .class 파일로 변환합니다.
    • 이때, 자바는 소스 코드 바이트 코드로 변환하여 플랫폼에 독립적인 형태로 만듭니다.
    • 컴파일 단계에서는 소스 코드를 바이트 코드로 변환하는 작업만 이루어집니다.
    • 이때, 에러가 있으면 컴파일러가 오류 메시지를 출력합니다. (컴파일 오류)
  3. 자바 바이트 코드 (.class)
    • .class 파일은 자바 바이트 코드가 저장된 파일입니다.
    • 자바 바이트 코드는 JVM(Java Virtual Machine)에서 실행될 수 있도록 변환된 코드입니다.
    • 이 바이트 코드는 운영 체제나 하드웨어에 의존하지 않기 때문에 "플랫폼 독립적"이라고 불립니다.
  4. 자바 가상 머신 (JVM)
    • JVM은 자바 바이트 코드를 해석하여 실행하는 역할을 합니다.
    • JVM은 자바 프로그램을 실행하기 위한 가상 머신으로, 각 운영 체제에 맞는 JVM이 존재합니다. 
    • JVM은 바이트 코드를 읽고, 이를 네이티브 코드(운영 체제가 이해할 수 있는 바이너리 코드, 기계어)로 변환하여 운영 체제에 전달합니다. 
    • 또한, JVM은 가비지 컬렉션, 스택 관리, 예외 처리 등 여러 기능을 제공하여 자바 프로그램이 원활하게 동작할 수 있도록 합니다.
  5. 운영 체제 (OS)
    • 운영 체제는 바이트 코드가 변환된 네이티브 코드를 처리합니다. JVM이 네이티브 코드로 변환한 후 OS에 전달되어 하드웨어 자원을 관리하고, 필요한 입출력을 처리합니다.
  6. 하드웨어 (HW)
    • 마지막으로, 하드웨어는 실제 계산과 처리 작업을 담당합니다. 운영 체제와 하드웨어 사이의 인터페이스 역할을 하여, 프로그램이 원활하게 실행되도록 지원합니다.

 

JVM 동작 방식 

1. 자바 프로그램을 실행하면 JVM은 OS로부터 메모리를 할당받는다.
2. 자바 컴파일러(javac)가 자바 소스코드(.java)를 JVM이 이해할 수 있는 자바 바이트 코드(.class)로 컴파일 한다.
3. Class Loader는 동적 로딩을 통해 필요한 클래스들을 로딩 및 링크 하여 Runtime Data Area(실질적인 메모리를 할당 받아 관리하는 영역)에 올린다.
4. Runtime Data Area에 로딩 된 바이트 코드는 Execution Engine을 통해 해석된다.
이 과정에서 Execution Engine에 의해 Garbage Collector의 작동과 Thread 동기화가 이루어진다.

5. 자바 프로그램이 종료되면 JVM이 할당받은 메모리를 해제하고, 그 안에 있던 데이터들도 모두 삭제된다.

 

* 참고: 자바에서의  Garbage Collector

서버 애플리케이션은 장시간 동안 실행되기 때문에, 메모리를 효율적으로 관리하지 않으면 사용되지 않는 객체들이 계속 메모리 상에 남아 있게 되고, 결국 메모리 부족 문제나 성능 저하가 발생할 수 있다. 가비지 컬렉터는 주기적으로 더 이상 사용되지 않는 객체를 찾아서 메모리를 회수해 주기 때문에, 서버 프로그램이 장시간 안정적으로 실행될 수 있도록 돕는다.

 

JVM의 구조

1. 클래스 로더(Class Loader)

2. 실행 엔진(Execution Engine)

  • 인터프리터(Interpreter)
  • JIT 컴파일러(Just-in-Time)
  • 가비지 콜렉터(Garbage collector)

3. 런타임 데이터 영역 (Runtime Data Area)

  • 메소드 영역
  • 힙 영역
  • PC Register
  • 스택 영역
  • 네이티브 메소드

4. JNI - 네이티브 메소드 인터페이스 (Native Medthod Interface)
5. 네이티브 메소드 라이브러리 (Native Method Library)

 

 

출처

 

☕ JVM 내부 구조 & 메모리 영역 💯 총정리

저번 포스팅에서는 JRE / JDK / JVM에 대해서 간략하게 알아보는 시간을 가졌다면, 이번 포스팅에서는 JVM의 내부 구조에 대해 좀 더 자세하게 알아보도록 할 예정이다. JVM(자바 가상 머신)은 자바 언

inpa.tistory.com