Post

[Java] 02. JVM (Java Virtual Machine)

[Java] 02. JVM (Java Virtual Machine)

지금 당장은 이해하기 어려운 내용들이 많습니다
하지만 지금 한 번, 프로그래밍에 익숙해지면서 또 한 번씩 읽다보면 Java의 구조를 자세하게 이해할 수 있게 될겁니다



1. JDK, JRE, JVM

img

  • JDK : Java Development Kit / 자발 개발 도구
  • JRE : Java Runtime Environment / 자발 실행 환경
  • JVM : Java Virtual Machine / 자발 가상 기계


2. Java의 호환성

img

Java는 Write Once Use Anywhere이라는 목적을 가지고 있습니다
즉, 하나의 목적파일로 어디든 실행이 가능하기에 운영체제에 구애받지 않고 개발을 할 수 있습니다

C언어는 One Source Multi Object Use Anywhere (하나의 소스파일로 각 기계에 맞는 목적파일로 어디든 사용 가능)라는 점에서 Java와의 차이점이 드러납니다


3. Java의 실행 과정

img

  1. 개발자는 자바 소스파일(.java)을 작성합니다
  2. JDK가 제공하는 javac를 사용하여 소스파일을 컴파일합니다
  3. JVM의 Class Loader는 컴파일로 생성된 바이트 코드(.class)를 전달 받아 동적 로딩을 통해 실행에 필요한 클래스들을 로딩하여 JVM 내부 Runtime Data Arear에 로드합니다
  4. JVM의 Execution에 의해 기계어로 해석되어 실행됩니다


4. Compile 언어 / Interpreter 언어

img

4-1. Compile 언어

C, C++, Java, C#, …

  • 소스파일 전체를 컴파일한 후 기계어를 CPU와 메모리를 통해 읽어서 바로 실행하는 방식으로 동작이 되는 언어
    • 소스파일의 크기가 크면 컴파일 과정이 오래 걸릴 수 있습니다
    • 컴파일이 된 후에 기계어로 바로 실행되기 때문에 실행 속도가 빠릅니다
    • Java는 javac에 의해 바이트코드로 컴파일 되지만 JVM에서는 인터프리터로 실행됩니다, 그래서 Compile 언어이지만 Interpreter 언어의 특징을 동시에 가집니다

4-2. Interpreter 언어

Javascript, Ruby, Python, …

  • 소스파일을 컴파일하지 않고 Interpreter를 사용하여 한 줄 씩 번역하면서 실행하는 방식으로 동작이 되는 언어
    • 컴파일 언어처럼 별도의 목적파일이 존재하지 않습니다
    • 컴파일 과정 없이 바로 실행되기 때문에 수정 및 디버깅시 편합니다
    • Interpreter만 존재하면 어디서든지 실행이 가능하기 때문에 자유롭고 독립적입니다
    • 실시간으로 번역되면서 실행되기 때문에 실행 속도가 느립니다


5. JVM (Java Virtual Machine)

JVM은 Java프로그램이 실행되는 가상 컴퓨터라고 생각하시면 됩니다

img
위 이미지처럼 JVM은 내부적으로 복잡한 구조를 가지고 있습니다

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