Post

JVM(자바 가상 머신)이란?

JVM(Java Virtual Machine)에 대하여

JVM(자바 가상 머신)이란?

Java 프로그램 실행 단계


java_compiler

Java 컴파일 과정1

Java로 작성된 프로그램은 일련의 과정을 거칩니다. 소스 코드가 실행되면 JVM을 통해 해당 OS에 도달하기 때문에 OS에서 인식 가능한 기계어로 바로 컴파일 되는 것이 아니라 위 그림과 같이Bytecode(.class)로 컴파일 됩니다.

Java compiler는 JDK를 설치하면 bin에 존재하는 javac.exe이다. 즉, JDK에 Java compiler가 포함되어 있음. javac 명령어를 통해 .java를 .class로 컴파일 할 수 있다.


JVM 이란?


JVM(Java Virtual Machine)이란 Java의 바이트 코드를 실행할 수 있는 가상 머신을 뜻합니다.

JVM은 Java 프로그래밍 언어와 기본 하드웨어 간의 인터프리터 역할을 하기 때문에 특정한 OS에 종속받지 않고 CPU가 JAVA를 인식, 실행할 수 있게 하는 가상 컴퓨터입니다. 이로써 Java 애플리케이션이 다양한 플랫폼 및 운영 체제에서 실행될 수 있는 런타임 환경을 제공합니다.

JVM

JVM2


JVM의 구조


JVM_Structure

JVM의 구조3

  • Class Loader(클래스 로더)

  • Execution Engine(실행 엔진)
    • Interpreter(인터프리터)
    • Just-In-Time(JIT 컴파일러)
    • Garbage Collector(가비지 콜렉터)
  • Runtime Data Area(런타임 데이터 영역)
    • Method Area(메소드 영역)
    • Runtime Data Area(힙 영역)
    • PC Register(프로그램 카운터 레지스터)
    • JVM Stack(스택 영역)
    • Native Method Stack(네이티브 메소드 스택 영역)
  • JNI - Native Method Interface(네이티브 메소드 인터페이스)
  • Native Method Library(네이티브 메소드 라이브러리)


JVM의 동작 방식


How_to_work_JVM

JVM의 동작 방식4

  1. Java 프로그램이 실행되면 JVM은 OS로 부터 이 프로그램이 필요로 하는 메모리를 할당 받는다.

  2. 자바 컴파일러(javac)가 자바 소스코드(.java)를 읽어들여 자바 바이트코드(.class)로 변환 시킨다.

  3. Class Loader를 통해 자바 바이트코드(.class) 파일들을 JVM으로 로딩한다.

  4. 로딩 된 자바 바이트코드(.class) 파일들은 Execution Engine을 통해 해석된다.

  5. 해석 된 바이트 코드는 Runtime Data Area에 배치 되어 실질적인 프로그램의 수행으로 이루어지게 된다.


마무리


  • JVM의 여러가지 특징이 있지만 가장 두드러지는 장점은 플랫폼 독립성입니다. 바이트 코드로 컴파일된 Java 응용 프로그램은 호환되는 JVM이 설치된 모든 운영 체제 또는 플랫폼에서 실행할 수 있습니다. 즉, Windows 시스템에서 개발된 Java 프로그램은 적절한 JVM이 있는 한 수정 없이 Linux 시스템에서 실행할 수 있습니다.

  • 이어서 다음 포스트는 JVM의 각 구성요소들의 기능 및 프로그램 실행 시 할당되는 메모리 영역에 대해서 설명하겠습니다.


추천 게시물



Reference



  1. 출처 : https://velog.io/@jungmyeong96/JAVA%EA%B8%B0%EC%B4%88-JVM%EC%9D%B4%EB%9E%80 ↩︎

  2. 출처 : https://0soo.tistory.com/12 ↩︎

  3. 출처 : https://velog.io/@bluegrate/java%EC%9D%98-%EB%8F%99%EC%9E%91%EA%B3%BC%EC%A0%95%EA%B3%BC-JVM%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B5%AC%EC%A1%B0 ↩︎

  4. 출처 : https://velog.io/@raejoonee/about-jvm ↩︎

This post is licensed under CC BY 4.0 by the author.