프로그래밍/자바(Java)

[ 자바 / JAVA ] 자바 가상 머신(JVM)과 자바 프로그램 실행

후르트링 2021. 7. 20. 18:49
728x90

자바 가상 머신(Java Virtual Machine)

  • 자바 가상머신도 운영체제 위에서 동작을 하는 프로그램을 실행하는 일종의 소프트웨어입니다.
  • 작성한 자바 프로그램을 운영체제가 실행하는 것이 아닌 자바 가상머신이 실행합니다.
  • 다시 말하면 자바 프로그램과 운영체제 사이에서 자바 가상머신이 중개자 역할을 하는 것 입니다.

[ JVM의 구조 및 기능 ]

  1. 위에서 언급 한 것 처럼 자바 가상 머신이 자바 프로그램을 실행하므로 어떤 운영체제에서도 실행이 가능합니다.
  2. 또한 프로그램 메모리를 관리하고 최적화하는 기능을 가지고 있습니다. (Garbage Collector)
  3. JVM은 Class Loader, Runtime Data Areas, Execution Engine 3가지로 크게 구성되어 있습니다.

Class Loader(자바 클래스 로더)

자바 프로그램은 클래스(.class)로 구성되어 있습니다. 이러한 클래스 파일들을 자바 클래스 로더가 메모리에 로드하고 실행할 수 있게 합니다.

Execution Engine(실행 엔진)

클래스 로더가 클래스 로딩 작업을 끝내면, 실행엔진이 Runtime Data Area에 적재된 클래스를 컴퓨터가 이해할 수 있는 기계어로 변경해 명령어 단위로 실행하는 역할을 합니다.

명령어를 하나씩 실행하는 인터프리터 방식과 바이트 코드를 네이티브 코드로 변환하는 JIT(Just In time) Compiler 방식이 있습니다.

Runtime Data Area

Runtime Data Area은 다음과 같이 5개로 나뉘어 집니다.

  • Method Area
    클래스 멤버 변수 이름, 데이터 타입, 리턴 타입 등 클래스 수준의 정보가 저장
  • Heap Area
    new 연산자로 생선된 객체와 배열이 저장됩니다.
  • Stack Area
    스레드가 생성될 때 마다 생성되는 영역으로, 대표적으로 지역변수가 저장됩니다. 매서드를 호출 할 때마다 스택이 개별적으로 생성됩니다.
  • PC registers
    스레드가 생성될 때 마다 생성되는 영역으로 스레드마다 하나씩 존재합니다. 스레드가 실행되는 부분의 주소와 명령을 저장하고 있습니다.
  • Native Method stack
    JAVA가 아닌 다른 언어로 작성된 코드를 위한 공간입니다.

 

[ Java 프로그램 실행 순서 ]

  1. 우리가 작성한 코드는 .java파일로 소스파일입니다.
  2. 자바 컴파일러는 자바 소스코드(.java)를 자바 바이트 코드(.class)로 변경합니다.
    • 자바 바이트 코드는 자바 가상머신(JVM)이 해석할 수 있는 코드 입니다.
  3. JVM이 자바 바이트 코드를 가지고 프로그램을 실행합니다. 운영체제마다 서로 다른 JVM을 사용하여야 합니다.

[ 참조 ]

What is the JVM? Introducing the Java Virtual Machine | InfoWorld

#자바가상머신, JVM(Java Virtual Machine)이란 무엇인가? (tistory.com)

JVM(Java Virtual Machine) Architecture | by Dope | Webdev TechBlog